看看这段剪辑代码:
main = function() {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
main();
}
caller();
如你所见,我想函数main识别变量T的值,但浏览器出现此错误:T未定义。
我可以通过将变量T的范围更改为全局范围来处理此错误,甚至将T变量传递给函数main,但由于某种原因我不想使用那些并且我想在范围内声明变量T功能主要。有可能吗?我该如何处理这种情况?
感谢。
答案 0 :(得分:6)
您有3个选项:
答案 1 :(得分:3)
T
是caller
的局部变量,因此在main
内不可见,一个简单的解决方案是将T
作为参数传递给{{1}来自caller
您需要将main
作为参数传递
T
另一种解决方案是在共享范围内声明main = function(T) {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
main(T);
}
caller();
,这种情况下是全局范围或将T
声明为main
内的闭包函数
答案 2 :(得分:2)
我看到它的方式,除了你已经说过的明显选择之外,你还有一些选择。
一种方法是在调用者中声明main:
caller = function() {
var T = 'me',
main = function() {
alert('This is ' + T);
};
main();
}
caller();
另一种情况是将调用者和主要包装成一个对象,但这可能是矫枉过正的。另一种方法是使用this
或Function.prototype.call
设置Function.prototype.bind
变量:
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();
答案 3 :(得分:1)
执行此操作的最佳方法是定义一个声明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
答案 4 :(得分:1)
尝试将变量T
的对象传递给函数main,并通过this
main = function() {
alert('This is ' + this);
}
caller = function() {
var T = 'me';
main.call(T);
}
caller();
答案 5 :(得分:0)
我记得三个选项:
答案 6 :(得分:0)
试试这个
var T = '';
main = function() {
alert('This is ' + T);
}
caller = function() {
T = 'me';
main();
}
caller();
答案 7 :(得分:0)
我认为这样的事情可以解决它。
main = function() {
alert('This is ' + T);
}
caller = function() {
var T = 'me';
eval('var func = ' + main);
func();
}
caller();