var b = function test(a,b){}; 之后 console.log(test(1,3)) 为什么会 运行失败

eisldkw 2020-10-07 08:56:07

代码如下:

var b = function test(a,b){
console.log(a+b)
return a + b
}(1,3) ; // 4
console.log(test(1,3));

问题如下:

1、 console.log(test(1,3)) 为什么会 运行失败
2、var b = function test(a,b){}此处的 test 是函数定义 还是函数表达式?
...全文
26509 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2020-10-17
  • 打赏
  • 举报
回复

var b = function test(a,b){
    console.log(a+b)
    return a + b
  }(1,3);
/*最简单的理解:var b= ****;那么,你要调用的就是b。你这里得出来4。是因为它是一个自执行函数,已经自动执行完成了。经由return a+b将执行结果赋给了b了。你也可以写成和一楼朋友那样的箭头函数,或者是以下匿名函数。效果都是一样的

函数表达式之所以可以写成你那样,给匿名函数命名了。是因为在严格模式下就有这要求
*/
var b = function(a,b){
    console.log(a+b)
    return a + b
  }(1,3);

至于你纠结依据,可查找:函数表达式 的相关资料,并对比:函数声明和函数表达式 的区别
Bluespun 2020-10-09
  • 打赏
  • 举报
回复
引用 5 楼 eisldkw 的回复:
[quote=引用 2 楼 Bluespun 的回复:]test是一个函数表达式,并且是一个自执行函数,当你赋值的时候,这个函数就已经执行了,自执行函数一旦执行之后就不存在了,找不到了,test函数名不起作用,并且此时的变量b已经就是自执行函数的返回值,为4
非常感谢。为什么函数名不起作用,有何依据?[/quote] 这是自己开发过程中总结出来的,也是自己的理解,你可作为参考,这是自执行函数的特点,执行完了就消失了,常用于闭包和初始化(通常个人小项目用不着),执行一次不希望外部再去使用,es6之前都是采用这种方式做模块化开发,减少全局变量的污染,拥有独立的作用域,如果想暴露部分数据和接口的话都是采用返回值或用外部的变量或对象接收(自执行函数可以访问外部的变量和改变外部的状态)。
废柴猿 2020-10-09
  • 打赏
  • 举报
回复
你可以看下 你不知道系列的javascript的上中下三卷,会让你有深层次的理解。
eisldkw 2020-10-08
  • 打赏
  • 举报
回复
引用 2 楼 Bluespun 的回复:
test是一个函数表达式,并且是一个自执行函数,当你赋值的时候,这个函数就已经执行了,自执行函数一旦执行之后就不存在了,找不到了,test函数名不起作用,并且此时的变量b已经就是自执行函数的返回值,为4
非常感谢。为什么函数名不起作用,有何依据?
eisldkw 2020-10-08
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
test不是函数定义,相当于临时函数对象(或函数指针) 相当于 var b = ((a,b)=>{ //和lambda表达式等效,所以test没有意义,不能使用test console.log(a+b) return a+b })(1,3);
非常感谢。但是您解释的依据是根据哪儿的资料,能明确的说明这一问题?
qybao 2020-10-07
  • 打赏
  • 举报
回复
test不是函数定义,相当于临时函数对象(或函数指针)
相当于
var b = ((a,b)=>{ //和lambda表达式等效,所以test没有意义,不能使用test
console.log(a+b)
return a+b
})(1,3);
天际的海浪 2020-10-07
  • 打赏
  • 举报
回复
当function关键字不是出现在行首,它就是一条“函数表达式”,如果函数表达式写了函数名,这个函数名是作为这个函数内的局部变量。只能在这个函数内访问,不能在这个函数外访问,一般只用于方便函数的递归调用。
Bluespun 2020-10-07
  • 打赏
  • 举报
回复
test是一个函数表达式,并且是一个自执行函数,当你赋值的时候,这个函数就已经执行了,自执行函数一旦执行之后就不存在了,找不到了,test函数名不起作用,并且此时的变量b已经就是自执行函数的返回值,为4

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧