一个 js 函数表达式 问题

Demo1: 结果是1

    (function foo(foo) {
        console.log(foo);
    })(1);
    

Demo2: 结果是function

    (function foo(a) {
    console.log(foo);
    })(1);
    

我想知道,是因为函数 参数 的优先级 比 函数表达式名 的优先级优先级高吗?

阅读 2.7k
6 个回答

你不是传了1进去了吗?肯定是1了呀。首先,你这个

(function foo(foo) {
        console.log(foo);
    })(1);

()();前面一个括号里是一个函数,前面括号里的表示就是一个整体了,然后后面括号是不是相当于你调用函数的时候fun(1)这样子?对吧,你这里传了参数1个匿名函数,自然就是1了啊!

即时函数,传入了参数1

这是一个匿名自执行函数

(function foo(foo) {
    var foo = foo = 1;
    console.log(foo);
})(1);

这样看

这问题需要你了解js的作用域,js的变量是向上查询 就近原则

1:在函數作用域沒找得到參數foo,輸出參數foo
2:函數作用域如果找不到foo,去全局找,找到了foo的函數,輸出函數foo

此函数末尾括号中的内容为传递给自身的参数

应该是,你不都自己试验出来了么。参数名最好别和函数名重了,看着太纠结了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题