• 函数定义式创建匿名函数后,变量是对匿名函数是复制还是引用?

    2016/01/07 Tab_Gre 4 评论  , 

函数声明创建有函数名存在,属于引用类型数据?但是函数定义式创建呢?

我自己简单尝试了一下,发现对变量的赋值是copy了一份,修改函数后她没有变化!
但是不知道我尝试的方法对不对,请指教

jsfiddle演示

3 收藏


直接登录
最新评论
  • 唐尤华 just programmer 2016/01/07

    贴一下尝试的代码,预期结果和实际结果吧

    • Tab_Gre   2016/01/07

      //函数定义式创建的匿名函数赋值给变量,对匿名函数是复制还是引用?

      var test = (function f(){
      console.log(‘Hi!’);
      });

      //修改函数f(),test会变化吗?

      var test1 = (function f(){
      console.log(‘Good!’);
      });

      console.log(test());

      结果对比还是返回: Hi!,这样可以证明是copy了一份吗?

      • 唐尤华 just programmer 2016/01/07

        修改函数f(),但是测试还是test()?
        console.log(test());
        代码上看,应该是Hi!没错

  • 惊鸿三世 web开发 2016/01/07

    是这样的,你使用匿名函数赋值给一个变量时,这形成了一个闭包,闭包中定义的变量或函数,只有在闭包里面才能访问,在外部是无法访问的;你在外部再次‘定义’时,其实不是修改了函数而是定义了一个在外部作用域下的函数。比如这段代码:
    var test = (function fn(){
    console.log(‘Hi!’);
    });
    console.log(fn);//报错ReferenceError: fn is not defined
    有关作用域与闭包可以查看我的笔记https://github.com/codingplayboy/javascript_notes/blob/master/js_closureFunc.md