当var a中的函数与参数同名时,为什么下面的JS代码工作,即选项?
var fn = function(option) {
var a = {
option: function() {
return option
}
}
return {
invoke: a.option
}
}
console.log(fn("B").invoke()); //"B"

答案 0 :(得分:2)
其中一个选项声明是传递给函数的协议,另一个是对象键。
fn("B") // sends B to the option method.
fn("B").invoke() // sends B to the option method and the invokes the value to be called.
option方法将参数存储为私有变量。 Invoke使用该私有变量。
答案 1 :(得分:1)
首先,您问题中的代码:As adeneo said,根本没有冲突。 option
参数和option
属性存在于两个完全不同的名称空间中。该参数是函数*调用的上下文的一部分,而该属性是对象的属性。在你的外部函数中,option
引用参数,a.option
(赋值后)引用内部函数。
但是你的头衔:
如果JS函数名与外部函数的参数同名,会发生什么?
这是一个非常不同的事情。它看起来像这样:
var fn = function(option) {
console.log(typeof option); // "function"
function option() {
// ...
}
};
fn("B");

在这种情况下,存在冲突,函数中的函数声明获胜,覆盖参数。
*具体而言,通过调用函数创建的执行上下文的Environment Record。