鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 閉包直接調(diào)用外層函數(shù)和把函數(shù)賦值給變量再調(diào)用有啥區(qū)別?

閉包直接調(diào)用外層函數(shù)和把函數(shù)賦值給變量再調(diào)用有啥區(qū)別?

function fn1(){
  var a = 6;
  function fn2(){
    alert(a) ;
  }
  return fn2;
}
// var f = fn1();
// f()  alert 6
fn1() //沒有效果

如上代碼,賦值給變量f能alert 6,但是直接調(diào)用fn1就沒有反應(yīng)。請問這是什么原理

回答
編輯回答
做不到

fn1()()

2018年6月19日 00:40
編輯回答
毀與悔

你仔細(xì)看看 fn1,直接 fn1是有結(jié)果的啊,結(jié)果就是返回了內(nèi)部函數(shù)fn2:

var f = fn1(); // f 實(shí)際上等于 fn2
f() //  fn2()結(jié)果是 alert 6
// 這樣結(jié)果就是 alert 6 了
fn1()()
2017年9月17日 14:37
編輯回答
雨萌萌

你只是調(diào)用函數(shù)fn1 返回的是一個函數(shù)引用
在加一個()才是執(zhí)行fn1()()

2017年8月23日 19:30
編輯回答
尤禮

因為return 是一個函數(shù)
所以 fn1() 得到一個函數(shù)
fn1()() 調(diào)用該函數(shù)

2018年2月17日 11:57
編輯回答
做不到

因為你fn1()只執(zhí)行了1次。
而你的f 在賦值的時候執(zhí)行了一次函數(shù),然后f本身又執(zhí)行了一次函數(shù),相當(dāng)于執(zhí)行了2次。

2018年7月20日 02:36