同一段js代码在chrome谷歌和IE8浏览器执行结果不一样


同一段代码在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代码》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...