静态网站有哪些优点ps网站子页怎么做的
静态网站有哪些优点,ps网站子页怎么做的,一个阿里云怎么做两个网站吗,阿里巴巴可以做公司网站吗背景
因为ES5的时候没有块级作用域#xff0c;所以ES5规定不能再if这样的块中声明函数#xff0c;但是为了兼容各大浏览器并没有严格遵守这条规定。
ES6的时候引入了块级作用域#xff0c;规定在块级作用域中声明函数就相当于使用let来声明变量一样。但是又因为浏览器端的…背景
因为ES5的时候没有块级作用域所以ES5规定不能再if这样的块中声明函数但是为了兼容各大浏览器并没有严格遵守这条规定。
ES6的时候引入了块级作用域规定在块级作用域中声明函数就相当于使用let来声明变量一样。但是又因为浏览器端的兼容问题标准中说明浏览器端的实现可以不完全遵守有自己的行为如下
允许在块级作用域内声明函数。函数声明类似于var即会提升到全局作用域或函数作用域的头部。同时函数声明还会提升到所在的块级作用域的头部。
if (false) {function a() {}
}
console.log(a);上面输出 undefined这表明了上面两条一个是允许在块级作用域内声明函数一个是块级作用域内声明类似于var。
if (true) {console.log(a);function a() {}
}输出函数a这表明了第三条函数声明会提升到所在块级作用域的头部。
问题和信息
上面现有的理论并不够解释下面的现象
var a;{a 5;function a() {}a 0;console.log(a);
}
console.log(a);chrome最新版输出的是第一个console输出的是0第二个console输出的是5。
先陈述下依据已知的三条理论得出上面代码几个不合理的现象
首先稍微变通就知道如下代码
{function a() {}
}console.log(a);这里打印了a是一个函数穿透了块级作用域。上面并没有解释这种现象。
a 0;的赋值并没有影响到块外部的a。
解释上面两个问题还需要额外的信息信息来自stackoverflow高赞回答原文在参考链接中
function enclosing() {{function compat() {}}
}// works the same asfunction enclosing() {var compat₀ undefined; // function-scoped{let compat₁ function compat() {}; // block-scopedcompat₀ compat₁;}
}上面对块中的函数声明引入的额外的概念更加清晰明了的解释了底层做了什么。
首先额外引入的信息本身也存在一些问题。少了函数会提升到当前块作用域顶部我认为应该如下修改
function enclosing() {var compat₀ undefined; // function-scoped{function compat() {}let compat₁ compat; // block-scopedcompat₀ compat₁;}
}这样就修复了没有函数提升的问题。
猜想
根据额外补充的知识加上自己的想象力得到如下结果
var a₀;{// 这部分被提升function a() {}let a₁ a;a₀ a;// 这部分被提升ENDa₀ 5;a₁ 0;console.log(a₁);
}
console.log(a₀);a₀ 和 a₁ 都是a在不同位置的不同分身。
参考
let 和 const 命令What are the precise semantics of block-level functions in ES6?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88997.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!