gpt4 book ai didi

javascript - 从匿名 JavaScript 函数访问变量

转载 作者:行者123 更新时间:2023-11-28 15:06:58 26 4
gpt4 key购买 nike

是否可以访问该函数外部的匿名函数内的变量?

我可能使用了错误的术语。

使用下面的伪代码,是否可以在同一页面上加载的另一个脚本中访问 var1?

function(i,e){
var var1;
NewFunc.init = function(){
var1 = 5;
};
}

最佳答案

Is it possible to access variables within an anonymous function outside of said function?

不,事实上,这是我们使用函数的目的之一:隐藏东西。 :-) 下面将详细介绍为什么这不仅仅是语法上的怪癖。

函数内的变量对于该函数和在该函数内创建的其他函数完全私有(private)(“封闭”变量创建的范围内的变量)。例如:

function foo() {
var answer = 42;

function bar() {
var question = "Life, the Universe, and Everything";
console.log(question, answer); // Works fine
}
console.log(question, answer); // Fails with a ReferenceError because
// `question` is out of scope
}
foo();

bar可以访问fooanswer变量,因为 bar是在foo内创建的。但是foo无法访问barquestion变量,因为 foo 不是bar内创建的.

这意味着可以创建可以访问和修改私有(private)变量的函数:

// This is ES5 and earlier style; in ES2015+, it could be a bit more concise
function foo() {
var answer = 42;
return {
getAnswer: function() {
return answer;
},
setAnswer: function(value) {
answer = value;
}
};
}
var o = foo();
console.log(o.getAnswer()); // 42
o.setAnswer(67);
console.log(o.getAnswer()); // 67

请注意,如果我们尝试替换

console.log(o.getAnswer()); // 42

console.log(answer);

失败有两个很好的原因:

  1. 变量超出范围

  2. 如果不知何故它在范围内,则 answer应该指的是?我们可以调用foo不止一次,每次调用都会创建一个新的 answer变量,所以...

<小时/>

旁注:函数是命名函数还是匿名函数,无论是普通函数还是 ES2015 新的“箭头”函数之一,都没有区别。

关于javascript - 从匿名 JavaScript 函数访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486012/

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