我问了一个关于以下代码的问题:
var b = function a(){}; b();
推荐: Why no error in writing wrong code in JS (wrong way of writing and executing a function)
我说过,下面的代码应该会出现错误,因为这是无效代码。函数只有两种定义方法- function a(){}或var a = function(){}。所以上面的代码是无效的,应该是错误的。
一位朋友回答说,上面的代码是有效的,而且a具有本地范围.现在,我尝试了各种代码,但是a总是返回全局范围。如果他说a has local-scope是真的,那么如何找到本地作用域,因为this keyword应该并且总是返回本地作用域或指向某个对象。
问题是它总是返回window-object,所以他(我的朋友)是错的。请解释或帮助!!
我试过:
var b = function a(){console.log(this);} b();
var b = (function a(){console.log(this);})();
结果:

发布于 2021-05-28 04:19:27
这里有两个完全独立的概念:
this指的是函数a可以引用的范围()
您是正确的,因为当调用不属于对象的普通、未绑定、非箭头的函数时,this指的是窗口,如b()。
您的朋友是正确的,因为标识符a仅可在函数中引用-它不是全局变量,而是函数的本地变量。请参见:
console.log(typeof a);
var b = function a() {
console.log(typeof a);
}
b();
https://stackoverflow.com/questions/67732863
复制相似问题