gpt4 book ai didi

Javascript:函数变量的可见性

转载 作者:行者123 更新时间:2023-12-02 18:53:24 27 4
gpt4 key购买 nike

我正在学习 Javascript,想要测试以下代码:

var name1 = "global";

function userobject(){
this.name1 = "local";
}
function func() {
alert(name1);
}

var myobject=new userobject();
func();
func.call(myobject);

根据我的理解,第一次调用 func 时,应该调用alert("global"),但在第二次调用 func.call(myobject) 时,应该调用alert("local"),

但实际上在这两种情况下都会显示“全局”文本。我认为,在执行时,当解释器看到变量名时,它会尝试在本地识别它,如果在那里找不到它,它将在父级中搜索它。就我而言,我认为由于 func.call(myobject),父对象是 myobject,并且该函数应该使用它的 name1 变量,该变量被定义为“本地”。

请纠正我对这件事的理解错误在哪里?

最佳答案

当解释器在作用域中找不到 name1 时,它会开始在外部作用域中搜索,如果找不到,最终会在全局命名空间中搜索。没有对 this 的隐式引用,因此 name1 始终是全局变量,而不是任何本地对象属性。如果您已显式访问该属性,那么您的代码将按预期工作:

function func() {
alert( this.name1 );
}

您的 call 方法确实this 放入作用域中,但它不会更改局部变量所引用的内容。您可以拥有与全局对象属性同名的变量,但它们不会是同一件事。

关于Javascript:函数变量的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15598691/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com