zoukankan      html  css  js  c++  java
  • javascript定义函数不同方式的区别

    学习javascript中遇到了这么一个问题,代码如下:

    var test = 'a';
    function test() {
      alert('Hello World!');
    }
    alert(test); //这句话打印出a
    test(); //这句话报错:缺少函数
    

    根据之前的知识函数就是对象,test开始赋值'a',后来又指向了一个函数,那么alert(test)应当打印出test函数内容。

    而如下两种方式的代码符合我们的期望:

    var test = 'a';
    test = new Function("alert('Hello World!')");
    alert(test);
    test();
    
    var test = 'a';
    test = function() {
      alert('Hello World!');
    }
    alert(test);
    test();

    后来查资料知道虽然第一种和后面两种声明函数的方式在逻辑上是等价的,但是有着如下区别:

    第一种函数会在代码执行以前被加载到作用域中,而后两种则是在代码执行到那一行的时候才会有定 义,这就解释了为什么test()报错的原因:因为test()函数先加载到作用域中,执行到var test = 'a'时将test函数覆盖,所以出现了上面的现象。

    同时通过这段代码还得出一个区别:

    函数声明会给函数指定一个名字,而函数表达式则是创建一个匿名函数,然后将这个匿名函数赋给一个变量。

  • 相关阅读:
    Hashcode的作用
    java 强弱软虚 四种引用,以及用到的场景
    Object类有哪些公用方法?
    equals和==的区别
    switch能否用string做参数
    Java九种基本数据类型,以及他们的封装类
    Singleton(Java)
    快速排序和二分查找(Javascript)
    快速排序和二分查找(Go)
    ubuntn 安装 MySQL
  • 原文地址:https://www.cnblogs.com/zhuifengjingling/p/3662514.html
Copyright © 2011-2022 走看看