Heim > Fragen und Antworten > Hauptteil
1.Beschreibung:
Ich möchte ein Funktionsarray-Ergebnis erhalten. Zuerst fügt die Funktion func dem Array-Ergebnis anonyme Funktionen hinzu (jede anonyme Funktion speichert ihre eigene Anzahl)
Aber ich habe nach der Rückgabe Parameter an die anonyme Funktion übergeben, was einem einfachen Ersetzen entspricht. Warum sind die Ergebnisse unterschiedlich?
function func(){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return function (){
return num
}
}(i)
)
}
return result
}
console.log(func()[1]()) //这样我就能得到各自函数里的num
Als nächstes übergebe ich die anonyme Funktion nach der Rückgabe als Parameter, kann sie aber nicht abrufen.
function func(fn){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return fn;
}(i)
)
}
return result
}
function fn(){
return num
}
console.log(func(fn)[1]()) //报错提示num未定义
PHP中文网2017-06-26 10:52:31
因为第二段代码中的fn是定义在全局环境中的。
你可以看看这里和下边的代码,希望对你有帮助
function func(fn){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return fn;
}(i)
);
}
return result;
}
function fn(){
return num;
}
var num = 1;
console.log(func(fn)[1]()); //1
给我你的怀抱2017-06-26 10:52:31
这就是一个很简单的作用域的问题,你的循环中定义的函数的形参只在这个函数中起作用。
函数是不应该在循环或者判断条件下定义的,会发生很多意想不到的问题。把你的函数拿出来定义,你会发现逻辑也清楚了许多。
扔个三星炸死你2017-06-26 10:52:31
num作用域问题,javascript存在函数作用域,num在第一个函数内部,而第二个函数在第一个函数外部,则第二个函数无法获取num.