亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

javascript - 直接為變數(shù)賦值一個函數(shù)和引用一個函數(shù)有什麼不同?
大家講道理
大家講道理 2017-05-19 10:33:08
0
2
654

直接為變數(shù)賦值一個函數(shù)和引用一個函數(shù)有什麼不同?

如:片段1和片段2

片段1

function fn(){
  var box = document.getElementById("box");
  box.onclick = function(){
      console.log(111);
  };
  box = null;
}

片段2

function fn(){
  var box = document.getElementById("box");
  box.onclick = click;
}

function click(){
  console.log(111);
}

片段1中onclick裡面的函數(shù)允許訪問fn中的變量,而片段2中的onclick函數(shù)不允許訪問fn中的變量,我是這樣想的,因為片段2中的click由於是在fn外部定義的所以無法存取fn中的變量,那麼也就是說在片段2中為onclick賦值其實是引用而非拷貝?

大家講道理
大家講道理

光陰似箭催人老,日月如移越少年。

全部回覆(2)
我想大聲告訴你

不不不, 你又不是呼叫方法, 傳遞參數(shù), 所以這兩個例子的核心不是什麼引用/拷貝的問題

這是作用域(原型鏈)的問題

變數(shù)在不同的作用域有不同的存取權限:
子作用域能存取父作用域
父作用域不能存取子作用域
同級作用域無法互相存取

PHPzhong

猜測你可能需要深入學習下變數(shù)作用域的相關知識,js的作用域是在定義的時候就已經(jīng)確定了。

片段1中

function fn(){
  var box = document.getElementById("box");
  box.onclick = function(){
      console.log(111);
  };
  box = null;
}

box綁定的onclick回調(diào),是在fn的函數(shù)內(nèi)部,因此其內(nèi)部所有局部變數(shù)都能被該回調(diào)存取。

片段2中

function fn(){
  var box = document.getElementById("box");
  box.onclick = click;
}

function click(){
  console.log(111);
}

click方法在fn函數(shù)外部,與之同級,由于定義時,click尚不在fn內(nèi)部,因此無法存取其內(nèi)部作用域。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板