最開始申明的index=0屬于全局變量,后續(xù)給左右按鈕綁定點擊事件的時候,index=index+1,這個時候得到的index是全局變量所以會覆蓋前面申明的index值,因為沒有加var所以是全局變量。但是如果在綁定函數(shù)里面改成var index=index+1的話,這個時候index就是局部變量了,無法覆蓋前面申明的index值了。這樣理解對嗎ar container = document.getElementById('container');var list = document.getElementById('list');var buttons = document.getElementById('buttons').getElementsByTagName('span');var prev = document.getElementById('prev');var next = document.getElementById('next');var index = 1;...next.onclick = function(){if(index == 5){index = 1;}else {index += 1;}showButton();animate(-600);}
1 回答
已采納

橋本奈奈未
TA貢獻436條經(jīng)驗 獲得超108個贊
好像沒什么不對。不過我這里還是再解釋得清楚點吧。
在ES6之前,JS只有全局作用域和函數(shù)作用域,也就是所謂的scope,JS在訪問你代碼中的變量或函數(shù)時就是沿著作用域鏈查找的,如果你了解了JS的原型鏈的概念的話,作用域鏈應該也不難想象,
//?這里是全局作用域 var?index?=?1; function?local()?{ ????//?這里是函數(shù)的作用域 ????var?index?=?2; ????//?在這個函數(shù)作用域中有一個index變量,所以執(zhí)行此函數(shù)時這里直接打印2 ????console.log(index); } function?foo()?{ ????//?在這里引擎同樣還是會在foo的函數(shù)中先查找index,很明顯函數(shù)中沒有index變量 ????//?于是向上層作用域查找找到全局的index,打印1 ????console.log(index);? } function?closure()?{ ????//?這里就是JS中常被提起的閉包 ????var?index?=?3; ????function?fn()?{ ????????//?根據(jù)前兩個例子,可以知道fn中沒有index ????????//?那引擎往上查詢closure的作用域中是否有index,所以這里打印3, ????????//?如果把上面的那句index注釋掉則繼續(xù)往上查找全局作用域,則打印1 ????????console.log(index); ????} ????fn(); } local(); foo(); closure();
在代碼中我都是初始化一個新的作用域內(nèi)的變量,這只是為了闡述清楚作用域這個概念,理解了作用域,那么var不過是區(qū)分到底是聲明一個新變量還是重新賦值變量的值而已【ps:在同一作用域內(nèi)重復聲明等于賦值】,如果是賦值,那么賦值的變量就是作用域鏈上最先找到的變量,僅此而已。
- 1 回答
- 0 關注
- 2203 瀏覽
添加回答
舉報
0/150
提交
取消