亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于全局變量問題請求解答

關于全局變量問題請求解答

你這個糟老頭子 2019-09-12 19:01:44
最開始申明的index=0屬于全局變量,后續給左右按鈕綁定點擊事件的時候,index=index+1,這個時候得到的index是全局變量所以會覆蓋前面申明的index值,因為沒有加var所以是全局變量。但是如果在綁定函數里面改成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條經驗 獲得超108個贊

好像沒什么不對。不過我這里還是再解釋得清楚點吧。

在ES6之前,JS只有全局作用域和函數作用域,也就是所謂的scope,JS在訪問你代碼中的變量或函數時就是沿著作用域鏈查找的,如果你了解了JS的原型鏈的概念的話,作用域鏈應該也不難想象,

//?這里是全局作用域
var?index?=?1;

function?local()?{
????//?這里是函數的作用域
????var?index?=?2;
????//?在這個函數作用域中有一個index變量,所以執行此函數時這里直接打印2
????console.log(index);
}

function?foo()?{
????//?在這里引擎同樣還是會在foo的函數中先查找index,很明顯函數中沒有index變量
????//?于是向上層作用域查找找到全局的index,打印1
????console.log(index);?
}

function?closure()?{
????//?這里就是JS中常被提起的閉包
????var?index?=?3;
????function?fn()?{
????????//?根據前兩個例子,可以知道fn中沒有index
????????//?那引擎往上查詢closure的作用域中是否有index,所以這里打印3,
????????//?如果把上面的那句index注釋掉則繼續往上查找全局作用域,則打印1
????????console.log(index);
????}
????fn();
}

local();
foo();
closure();

在代碼中我都是初始化一個新的作用域內的變量,這只是為了闡述清楚作用域這個概念,理解了作用域,那么var不過是區分到底是聲明一個新變量還是重新賦值變量的值而已【ps:在同一作用域內重復聲明等于賦值】,如果是賦值,那么賦值的變量就是作用域鏈上最先找到的變量,僅此而已。

查看完整回答
反對 回復 2019-09-12
  • 1 回答
  • 0 關注
  • 2206 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號