2011-12-10 81 views

回答

11

这只是一个标准的作用域情况 - 事实上它是一个匿名函数表达式作为参数传递给另一个函数并不重要。请注意,在您的performAction()函数(您没有显示)中,它将无法访问作为回调函数参数的str - 如果performAction()引用str,它将获得全局“internet”变量(或其自身的本地如果定义,则为str)。

为了作用域的目的,函数的参数与该函数的局部变量相同,这意味着它们会从外部作用域中屏蔽相同名称的其他变量 - 但具有不同名称的变量仍然可以访问,即使定义在更宽范围。

那里可以得到令人困惑是,如果你做这样的事情:

var str = "internet"; 

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

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

在这种情况下,我有一个名为str参数的功能,但是当我把它称为我传递一个不同str。请注意,在该功能中更改str仅更改本地str,而不是全局。他们是两个不同的变量...

7

技术上有没问题。该函数将记录当前在作用域(您的参数)中的str

由于显而易见的原因,这不被认为是一个好主意。至少,它会导致无法读取的代码。

相关问题