javascript - js全局环境下的this是window,直接foo()调用时,this是什么,结果undefined,为什么?
巴扎黑
巴扎黑 2017-04-10 14:59:47
[JavaScript讨论组]

直接上代码

<script type="text/javascript">
   'use strict';
    console.log(this === window); // true
    var foo = function() {
        console.log(this === window);
        console.log('this:',this);
    };
    foo();
    window.foo();
</script>

巴扎黑
巴扎黑

全部回复(6)
迷茫

use strict 的问题,严格模式下禁止 this 指向全局变量,参见:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

迷茫

函数没有明确返回值的情况下,都是返回undefined的

迷茫

因为你声明了严格模式
'use strict';
严格模式下,禁止this关键字指向全局对象

伊谢尔伦

和函数的返回值或者console.log的返回值没什么关系;这里是因为有"use strict",在严格模式下,重新规定了执行上下文中的this禁止函数中this关键字指向全局对象,直接foo()这样的话,函数中this就是undefined。反之,如果不使用严格模式,那么this就是window了。可以参见阮一峰的这篇 http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

天蓬老师

看语言精粹里说一般函数this的设定是语言设计上的一个错误,如果设计正确,那么内部函数被调用时this应该指向外部函数的this变量。所以,我之前也觉得一般的函数这个this有点蛋疼的,无法理解。

ringa_lee

我了个去,小俞的正确答案居然被忽略了,还写了个:答非所问。
我也是醉了。
如果没有"use strict"
foo中的this就是window
你用了"use strict", foo中的this指向window是被禁止的,但是除了window之外,foo中又没有其他作用域链了,所以this就是undefined。
所以:

this === window // false
this === undefined // true
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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