我正在尝试多次同时运行相同的函数但如果我创建一个var variablename
的本地函数,则子函数不会识别它。如果我将其设为全局,则函数的所有实例都将覆盖它。
function vladimir(){
var test="hello";
hanspeter();
}
function hanspeter(){
console.log(test);
}
console.log输出undefined。
答案 0 :(得分:0)
使用函数参数:
function vladimir(){
var test="hello";
hanspeter(test);
}
function hanspeter(arg){
console.log(arg);
}
答案 1 :(得分:0)
你在这里遇到了一个范围问题。
当您在不使用var(function <function_name>() {}
)的情况下声明方法时,这些函数声明将移动到本地范围的顶部(如果要查找它,则称为函数提升)。
如果您手动声明函数,则必须等到它们都被声明为止才能使用它们。这是因为第一个函数不知道在它下面声明的任何函数。
您还遇到了一个问题,即变量没有作用域。如果你有一个在一个函数中声明的变量,则不能保证在另一个函数中存在(因为它是一个不同的范围)。
如果你想传递这些变量,最简单的方法是将它们传递给函数参数,这些参数可以在你的其他函数中访问。
所以在你的简单例子中,你可以让它像这样工作:
var hanspeter = function (test) {
console.log(test);
}
var vladimir = function() {
hanspeter( "hello" );
}
答案 2 :(得分:0)
JavaScript使用词法范围 - 看起来你期待动态范围。本质上,这意味着函数可以根据声明的位置访问变量,而不是调用它的位置。例如,以下内容可行:
function vladimir(){
var test="hello";
function hanspeter(){
console.log(test);
}
hanspeter();
}
因为test
存在于声明hanspeter
的地方。但是在你的test
中存在hanspeter
被称为的地方,它不会让它访问。
您也可以通过传递变量来获取变量:
function vladimir(){
var test="hello";
hanspeter(test);
}
function hanspeter(test2){
console.log(test2);
}
我将参数调用hanspeter
test2
来表明参数的名称是重要的,而不是传递的变量的名称。