2011-12-10 12 views

Respuesta

11

Esto es solo una situación de alcance estándar: no importa el hecho de que sea una expresión de función anónima pasada como parámetro a otra función. Tenga en cuenta que dentro de su función performAction() (que no se muestra) no tendrá acceso al str que es el parámetro de la función de devolución de llamada - si performAction() hace referencia a str obtendrá la variable global "internet" (o su propio local) str si está definido).

Los parámetros de una función son, por alcance, los mismos que las variables locales de esa función, lo que significa que ocultan otras variables del mismo nombre del ámbito exterior, pero aún se puede acceder a variables con nombres diferentes incluso si se alcance.

Dónde podría resultar confuso es que si haces algo como esto:

var str = "internet"; 

(function(str) { 
    console.log(str); // "internet" 
    str = "local param"; 
    console.log(str); // "local param" 
})(str); 

console.log(str); // "internet" 

En ese caso, tengo una función con un parámetro llamado str pero cuando lo llamo yo estoy de paso en una diferente str. Tenga en cuenta que cambiar str dentro de esa función solo cambia el str local, no el global. Son dos variables diferentes ...

7

Hay técnicamente no hay problema con eso. La función registrará el str que está actualmente en el alcance (su parámetro).

Por razones obvias, esto no se considera una buena idea. Por lo menos, crea un código ilegible.

Cuestiones relacionadas