同一段代码在chrome谷歌和IE8浏览器执行结果不一样(JS代码执行作用域的问题):
var _ = function() {console.log('a')};
var q = (function() {
return {
0: function _() {
console.log('c');
},
'dx': function dasdsa() {
_();
}
};
})();
q.dx();
上述代码,在chrome谷歌下执行是a,在IE8下执行是c,为什么呢?
参考答案:
原因应该是ES6的块级作用域的问题。 为了不混淆:var _的值虽然是一个函数,但是我们称呼为变量_,q内定义的_称呼为函数_ ES6块内声明的函数其作用域在这个块内,q里这个立即执行函数已经创建了一个函数作用域,里面使用function xxx() {} 格式声明并定义的函数会提升到这个作用域,相当于在这个作用域开头声明的函数一样,IE8中函数_就被提升到这里了。
然而对于支持ES6块级作用域的浏览器, return语句中的对象就是一个块,块外面访问不到里面定义的函数(即不能提升到块外面去),q.dx其实形成了一个闭包,IE8中作用域内能找到函数_,所以hold的_是函数_,输出c;chrome中找不到,q.dx包住的_是变量_,所以输出a。
相关阅读 >>
同一段JS代码在chrome谷歌和ie8浏览器执行结果不一样
更多相关阅读请进入《JS代码》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者