Javascript 如果JS函数名与外部函数的参数同名,会发生什么情况?

Javascript 如果JS函数名与外部函数的参数同名,会发生什么情况?,javascript,scope,Javascript,Scope,当var a中的函数与参数(即option)同名时,为什么下面的JS代码可以工作 var fn=函数(选项){ 变量a={ 选项:函数(){ 返回选项 } } 返回{ 调用:a.option } } log(fn(“B”).invoke())//“B”选项声明之一是传递给函数的协议,另一个是对象键 fn("B") // sends B to the option method. fn("B").invoke() // sends B to the option method and the

当var a中的函数与参数(即option)同名时,为什么下面的JS代码可以工作

var fn=函数(选项){
变量a={
选项:函数(){
返回选项
}
}
返回{
调用:a.option
}
}

log(fn(“B”).invoke())//“B”
选项声明之一是传递给函数的协议,另一个是对象键

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使用该私有变量。

选项声明之一是传递给函数的协议,另一个是对象密钥

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使用这个私有变量。

首先,问题中的代码:,根本没有冲突。可以说,
选项
参数和
选项
属性存在于两个完全不同的名称空间中。参数是调用函数*的上下文的一部分,而属性是对象上的属性。在外部函数中,
option
指的是参数,
a.option
(赋值后)指的是内部函数


但对于你的头衔:

如果JS函数名与外部函数的参数同名,会发生什么情况

那是完全不同的事情。它看起来是这样的:

var fn=函数(选项){
console.log(typeof选项);/“函数”
函数选项(){
// ...
}
};

fn(“B”)首先,问题中的代码:,根本没有冲突。可以说,
选项
参数和
选项
属性存在于两个完全不同的名称空间中。参数是调用函数*的上下文的一部分,而属性是对象上的属性。在外部函数中,
option
指的是参数,
a.option
(赋值后)指的是内部函数


但对于你的头衔:

如果JS函数名与外部函数的参数同名,会发生什么情况

那是完全不同的事情。它看起来是这样的:

var fn=函数(选项){
console.log(typeof选项);/“函数”
函数选项(){
// ...
}
};

fn(“B”)
这里没有冲突,第二个
选项
是对象中的一个属性,实际上是
a.option
,它与
选项
不同,你的标题和问题问的问题截然不同。:-)我想我现在明白了。在a.option函数中,“a.option”所代表的内容不可用,除非引用了“this”对象,例如下面的代码:----var a={option:function(){console.log(“test”);return this.option();};a、 选项()//测试,测试,测试。。。(ad infinum)---因此在.option中,“option”只能引用外部函数的参数“option”,因此两者之间没有冲突这里没有冲突,第二个
选项是对象中的属性,事实上,这是一个选项,它与你的标题和问题所问的事情截然不同我想我现在明白了。在a.option函数中,“a.option”所代表的内容不可用,除非引用了“this”对象,例如下面的代码:----var a={option:function(){console.log(“test”);return this.option();};a、 选项()//测试,测试,测试。。。(ad infinum)---因此在a.option中,“option”只能引用外部函数的参数“option”,因此这两个“向option方法发送B”和调用要调用的值“no,这是不正确的”之间没有冲突。它将
“B”
作为参数发送到
fn
函数;函数将其作为
选项
参数接收,并通过闭包
a.option
使用它。没有任何内容将
“B”
传递给“option方法”。“将B发送给option方法,并调用要调用的值”否,这是不正确的。它将
“B”
作为参数发送到
fn
函数;函数将其作为
选项
参数接收,并通过闭包
a.option
使用它。没有任何内容会将
“B”
传递给“选项方法”