javascript - 怎么理解严格模式下this
PHPz
PHPz 2017-04-11 11:12:12
[JavaScript讨论组]

JavaScript高级程序设计中有下面这一句话:

在严格模式下,未指定环境对象而调用函数,则 this 值不会转型为 window。 除非明确把函数添加到某个对象或者调用 apply()或 call(),否则 this 值将是 undefined。

我进行了如下的尝试,希望能重点解释setTimeout和全局函数这三个中的this.

"use strict";
(function(){
    console.log(this)//undefined
})();

!function(){
    console.log(this)//undefined
}();

setTimeout(function(){
    console.log(this) //window
},0);

function a(){
    console.log(this);
}
a(); //undefined
PHPz
PHPz

学习是最好的投资!

全部回复(1)
ringa_lee

你是想问为什么最后两个也是输出不同?
setTimeout(function(){//setTimeout是window对象的属性(方法),所以很多情况下有window.setTimeout这种写法

console.log(this) //window

},0);
function a(){//这是一个直接申明函数,调用时,this指向window,因为是在严格模式下,所以输出undefined

console.log(this);

}
a();//同时,这种写法和前面两种自调函数的意义其实是一样的,不同的是它有名字,并且手动调用了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号