本文目錄一覽:
js為什麼for in可以用const
const的特點是在塊級作用域內不能重複聲明,且不能給它重新賦值(重點是塊級作用域)。for in的每一次循環都是一個塊級作用域,所以可以使用for(const a in b)的形式去遍歷對象的。但是在for循環內不可給c重新賦值。
let和const的引入會對js編程帶來哪些改變
1. let 命令
① 在js中是沒有塊級作用域的,var 聲明的變數作用域是整個函數體,而let可以起到這一作用
{ let a = 1; var b = 2; } console.log(b); // 2 console.log(a); // a is not defind
② 而let可以起到這一作用啊在js中變數和函數的聲明會提升到當前作用域最頂部執行。這樣就會出現問題。
var a = []; //函數和變數i會最先進行聲明,同時全局變數i經過for循環賦值為10 for (var i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } console.log(i);//10 a[6]();//10
而使用let就解決了這個問題
for (let i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } a[6](); //6
③ let不像var那樣,會發生「變數提升」現象
console.log(a); // a is not defined let a = 1;
④ let不允許在相同塊級作用域內,重複聲明同一個變數
// 報錯 { let a = 10; var a = 1; } // 報錯 { let a = 10; let a = 1; }
2. const 命令
① const也用來聲明變數,但是聲明的是常量。一旦聲明,常量的值就不能改變。
② 與let相同也不能在相同塊級作用域內重複聲明同一個變數。
③ const的作用域與let命令相同:只在聲明所在的塊級作用域內有效。
const PI = 3.1415; console.log(PI); // 3.1415 //PI = 3; // Assignment to constant variable.(不能給常量賦值) //const PI = 3.1;// Identifier ‘PI’ has already been declared
js全局和局部的作用域
樓下說的不對吧!
首先:第一個,第一行定義了一個全局的var01,再在方法里定義了一個var01,首先搞清楚什麼是var ,這是個變數聲明關鍵字,他出現在哪和你全局不全局沒有任何關係!
第一個之所以undefind是因為你將一個變數名定義兩次,這個是不允許的,undefind在這裡本質是聲明錯誤,內存中不存在,即聲明時發生錯誤,內存沒有記錄!不存在的東西js統一報錯undefind!
第二個:輸出1,是因為,js是腳本語言,在執行時按照順序載入,當執行到write時,var01的值是1,此時還沒執行到var01=0,這一步,所以先到先得,取出為1,然後在將var01賦值為0,但是此前js就已經輸出了,所以0不會被輸出!
關於全局和非全局,等你做久了你其實會發現,把全局叫做作用域會更好,他作用於誰,取決於你在何處聲明(var關鍵字),比如你在頁面的js第一行就寫一個var var01,那這個var01就只作用於這個頁面,那我是不是可以理解,所謂全局是整個程序,那我雖然定義了一個var,卻不能延伸到整個程序,那我是不是就可以推翻這個var看起來像全局,但在我的語境中其實並非全局,他只是我這個頁面的全局,對於我整個程序來說,這個頁面又是個局部!所以用作用域來解釋會更好!
如果確實需要區分的話,那你可以這樣理解
根據js 的執行順序是逐行執行的特點,那麼在js中,首先出現的var就是全局(順帶一提,function某種程度上等同var,再此與var並論!)所以簡單理解就是,方法體外的var都是這個js的全局,方法體內的都是這個方法體的全局(你沒聽錯,是這個方法體的全局!!!!!),但是,方法體是js 的全局,方法體內的var是方法的全局,而var var01的作用域又限定為方法體,所以,方法體內的var相對於js來說只能是局部.
其實這還漏了一個知識點:叫做,方法私有屬性,即:方法體內定義的任何屬性和方法都只歸其父方法所有!!!!!
理解:某個頁面的js文件理解為一個大方法,這個方法里又有其他方法,而子方法里的屬性因為只歸其父,所以父方法的父方法無權調用,父父方法若要調用只有通知其子方法,讓子方法通知其子屬性並暴露給其父父方法!
但願你聽懂了,哈利路亞!自己都繞了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257274.html