永发信息网

javascript函数表达式有存在的必要吗?

答案:2  悬赏:60  手机版
解决时间 2021-03-01 03:08
javascript函数表达式有存在的必要吗?
最佳答案
javascript函数表达式有存在的必要的。
 在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示:
  var test = function(x){
    return x;
  }

  function test(x){
    return x;
  }
尽管函数定义表达式和函数声明语句包含相同的函数名,并且都创建了新的函数对象,但是这二者却有区别。
  函数声明语句中的函数名是一个变量名,变量指向函数对象。
  函数定义表达式和通过var声明变量一样,其函数被提前到了脚本或函数的顶部,因此它在整个脚本和或函数内都是可见的。这样的话,只有函数变量声明提前了,函数的初始化代码仍然在原来的位置。但是使用函数声明的话,函数名称和函数体均提前了,即脚本中的函数和函数中嵌套的函数都会在当前上下文中其它代码之前声明,也即可以在声明一个函数之前调用它。
  举个例子:
  test(1);
  function test(x){
    console.log(x);
  }
  上述代码能正常执行,结果输出为1;因为对于函数声明语句,函数名称和函数体均提前声明了,可以在声明之前调用它。

  test(1);
  var test = function(x){
    console.log(x);
  }
  上述代码不能正常执行,会报错。
  因为对于函数定义表达式,只有函数变量声明提前了,但是函数的初始化代码仍然在原来的位置,也即相当于如下的代码
  var test; //函数变量声明提前
  test(1);
  var test = function(x){
    console.log(x);
  }
  因此,会报错test不是一个函数的错误。
全部回答
var init = function() { }; 是函数表达式,函数在代码执行的到当前行的时候才被执行,init 才被赋值。 function init() {} 是函数的声明,和 var 一样,会被提前到代码最前面定义。 所以,下面的两个例子: foo(); // 在函数声明之后调用 foo,可以正常调用。因为 foo 被提前到最前面定义了。 function foo() {     return true; }     foo(); // 在函数表达式之前调用函数,报错。因为这时候还没有 foo 这个变量。 var foo = function() {     return foo; };    es5 规定,函数只能在顶级作用域和函数作用域中声明,否则是不合法的。例如:     if( true ) {     // 非顶级和函数作用域内定义函数,是错误的,虽然可能浏览器不一定会抛出错误,但是是不规范的。     function foo() {         return true;     } }    es6 引入了块级作用域的概念,这种定义方法就被允许了。在块级作用域里面声明的函数,作用域类似于使用 let 声明的变量,在块级作用域之外没有办法被调用。 例如:     {     function foo() {         return true;     } } foo(); // 在函数声明的代码块之外调用函数,会抛出错误。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
小学二年级加减乘除混合运算应用题
深州市大冯营乡中李村卫生院防保站我想知道这
解梦 我和我男朋友在同一天晚上同时梦见我们
08年的奥运会纪念币
我是未成年人 怎么开通支付宝
南京江宁证券公司江宁
他说好今年要娶我,现在突然打电话又不接,又把
在制表中一个数字乘以一个数字加上一个数字乘
w10宽带连接被我删了怎么登录连接宽带
满足感是什么,愉悦感又是什么
用一些绳子做跳绳,如果每根跳绳长1.5米,这
齐桓公任用伊尹为相,通过改革,使齐国国富兵
胜利旅社怎么去啊,有知道地址的么
2017年阳历10月9号离过年还有多少天
到筠连大雪山旅游有什么风景,名胜古迹
推荐资讯
三国杀里面的成语
幼师一转行做什么
58×18的积大约等于A.1044B.500C.1200
我在嘉定新城地铁站附近,要去嘉定牙防所,该
岳阳路/杨家湾路(路口)我想知道这个在什么地
铝材的价格表
论语中描写儿子的喜悦心情
新买的男装摩托车可以爬山坡走山路吗?还没有
形容感情止步的成语
地炉海鲜烤肉这个地址在什么地方,我要处理点
如果等式根号a³+a²=-a根号a+1成立
淘宝定金宝贝可以发货后立刻确认收货吗?据说
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?