在下面的示例中,是否有任何方法可以从 someFunction 中获取对 someFunction 外部声明的 someValue 变量的引用,或者是完全被同名函数的参数遮挡。我很欣赏我可以将它附加到窗口并使用 this 从函数中访问它,但是在这种情况下有没有办法访问它?
[编辑]澄清。我知道参数是阴影变量。显然,更改参数的名称将删除此问题。我的问题是,在这种情况下是否有任何方法可以访问变量。
(function($){
var someValue = 41;
function someFunction(someValue) {
console.log(someValue); //= 22
}
someFunction(22);
}(jQuery));
答案 0 :(得分:2)
你似乎故意遮蔽变量,然后试图获得它的价值。只需给它一个不同的名称或重命名您的参数。
var someValue = 41;
function someFunction(myParameter) {
console.log(someValue); // someValue == 41
}
someFunction(22); // logs 41
答案 1 :(得分:0)
除非您要传递变量,否则无法记录在函数外声明的someValue
:
(function($){
var someValue = 41;
function someFunction(someValue, otherValue) {
console.log(someValue, otherValue); //= 22 41
}
someFunction(22, someValue);
}(jQuery));
或重命名参数:
(function($){
var someValue = 41;
function someFunction(otherValue) {
console.log(someValue); //= 41
}
someFunction(someValue);
}(jQuery));
这是因为您用作参数的someValue
名称会遮盖在函数外声明的名称。
答案 2 :(得分:0)
因为您正在使用局部变量(var),所以someValue的上下文被设置为该函数。最好的解决方案是使用其他人建议的其他名称,如果您迫切希望使用相同的名称,但可以通过删除 var 关键字将其附加到窗口对象:
(function($) {
someValue = 41;
function someFunction(someValue) {
console.log(window.someValue); //= 41
console.log(someValue); //= 22
}
someFunction(22);
}(jQuery));