读js权威指南“作为值得函数”产生了疑惑,求释疑

首先函数声明和函数表达式理解的也不是很透彻,基本使用的都是函数声明,也知道会前置这点。我印象中也不知道函数表达式有没有函数名?因为也没怎么用过。今天看到了把函数赋给变量,发现和函数表达式似乎一样,希望谁能够解答下,谢谢。

        var s = function square (x){
                return x*x;
            }
            console.log(square(4));
            console.log(s(4))

上面的问题1,下面是问题2,为什么上面的代码报错“square is not defined”,而下面的代码正常的输出,是因为上面的代码属于函数表达式,所以不支持square(4)是吗?写到这儿突然想问,函数表达式就是在函数function前面同一行写上<var xx =>,而把函数赋给变量只是在函数声明的基础上,另起一行<var xx = 函数名>,是这样么?求解,谢谢

        function square (x){
                return x*x;
            }
            var s = square;
            console.log(square(4));
            console.log(s(4))
阅读 3.1k
4 个回答

关于问题二,
表达式,就是直接创建一个函数作变量,外部这个函数不存在。
而函数赋予变量,则是先有函数,再有变量。

于是有了问题一的答案,s 本身是函数,外部是不存在这个函数的,于是报错不存在。
另外,应该是写成:

var s = function() {
.......
}

clipboard.png

两个问题同个答案。函数表达式的函数名是只读的,只能在这个函数内部引用,一般用作递归。

首先,咱们这种写法既不是属于函数声明也不是属于函数表达式
函数声明 function 函数名(){};你可以理解为先定义变量,在创建一个函数对象,并将地址赋给该变量
函数表达式 fun=function(){} 其语法是 变量 = 匿名函数
这是一种特殊的写法, 姑且可以算是在用函数表达式定义函数的同时,给匿名函数一个“内部函数名”
所谓内部函数名就是只有函数自己认识它,他在全局没有地位,甚至不占用命名空间

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