在另一个作用域中声明变量
Declare variable in another scope
看看这个剪切的代码:
main = function() {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
main();
}
caller();
正如你所看到的,我想用函数main来识别变量T的值,但浏览器出现了这个错误:T是未定义的。
我可以通过将变量T的作用域更改为全局作用域,甚至将T变量传递给函数main来处理这个错误,但由于某种原因,我不想使用这些变量,我想在函数main的作用域中声明变量T。这可能吗?我该如何处理这种情况?
谢谢。
您有3个选项:
- 在两者之外声明T
- 将T作为参数传递给main(T)
- 在调用者内部写入main
T
是caller
的局部变量,因此它在main
内部不可见,一个简单的解决方案是将T
作为参数从main
传递到caller
您需要将T
作为参数传递
main = function(T) {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
main(T);
}
caller();
另一种解决方案是在共享作用域中声明T
,在本例中为全局作用域,或者在main
内声明main
为闭包函数
在我看来,除了已经说明的显而易见的选项之外,还有一些选项。
一种方法是在调用者中声明main:
caller = function() {
var T = 'me',
main = function() {
alert('This is ' + T);
};
main();
}
caller();
另一种情况是将调用者和main都封装到一个对象中,但这可能有些过头了。还有另一种方式可以是使用Function.prototype.call
或Function.prototype.bind
:设置this
变量
main = function() {
alert('This is ' + this);
}
caller = function() {
var T = 'me';
main.call(T);
}
caller();
或
main = function() {
alert('This is ' + this);
}
caller = function() {
var T = 'me',
newMain = main.bind(T);
newMain();
}
caller();
T
、main
和caller
。这样,两个函数都可以访问值,但它不是全局
var pair = (function() {
var T;
var main = function() {
alert('This is ' + T);
};
var caller = function() {
T = 'me';
main();
};
return { 'main': main, 'caller': caller}
})();
pair.main(); // Call main
pair.caller(); // Call caller
尝试将变量T
的对象传递给函数main,并通过this
访问它
main = function() {
alert('This is ' + this);
}
caller = function() {
var T = 'me';
main.call(T);
}
caller();
我可以回忆三个选项:
- 使T全球化
- 在调用者对象中生成getter并使用它来获取值
- 将T作为参数传递
试试这个
var T = '';
main = function() {
alert('This is ' + T);
}
caller = function() {
T = 'me';
main();
}
caller();
我认为这样的东西可以处理它。
main = function() {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
eval('var func = ' + main);
func();
}
caller();
相关文章:
- 使用同一对象中的其他变量声明变量
- 用||声明变量
- 使用javascript使用for循环声明变量
- JavaScript-用for循环项声明变量
- try声明变量的作用域
- 有没有一种方法可以使用函数参数的值来声明变量
- 在使用javascript再次声明变量之前,请先清除或删除该变量
- Javascript未声明变量
- 在Javascript中,我可以在声明变量之前使用它吗
- 在html文档的开头声明变量
- 按什么顺序声明变量和函数
- 如何以正确的方式在jQuery中声明变量
- 在 Angular 服务中接收函数的未声明变量
- 字典和声明变量
- 需要一些有关以以下样式声明变量的信息
- 在 jQuery 中使用常量声明变量
- 从外部文件在打字稿中声明变量得到引用错误:..未定义
- JavaScript,声明变量时混淆语法
- 在 javascript 函数和内存管理中声明变量
- Javascript 使用 if 语句声明变量