javascript宣告變數的4種方法:1、使用「var」宣告變量,例「var a;」;2、使用「function」宣告變數,例「function Fun (num) {}」; 3、使用「let」宣告變數;4、使用「const」宣告變數。
本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
JavaScript 變數宣告的方式有以下幾種:
我們來驗證一下
驗證方法一:
function repeatFun (num) { return num; } repeatFun(10); // 10 var repeatFun = 1; repeatFun(2); // Uncaught TypeError: repeatFun is not a function
這個方法是利用var可以重複宣告變量,但是會後者覆寫會覆寫前者的特點
我們來看看這裡發生來什麼事:
根據執行結果我們可以推斷出在瀏覽器的記憶體中存在一個repeatFun 變量,之前是一個函數,後來被一個var 關鍵字重新聲明並初識化為1。
驗證方法二:
{ let repeatFun = 1; function repeatFun (num) { return num } } // Uncaught SyntaxError: Identifier 'repeatFun' has already been declared
第二種方法我是利用
ES6的語法:利用let 不能重複宣告的特性來證明function 也是一種宣告變量的方式
#變數聲明提升
var 能重複聲明,後者覆寫前者
##let 和const 則不能重複宣告var b = a + 1; // b: NaN var a = 1; // a: 1
這是程式碼表面上就是做著這些事,實際上做的事情是這樣:
在每次宣告一個變數的時候,他們的宣告都是放在程式碼的最上面,而且他們都是要進行一次初始化,值為:undefined,但是賦值的位置是不會改變,
var b; var a; b = a +1; // b: NaN a = 1; // a: 1
範例二,驗證let 是否存在變數提升:
let b = a + 1; // Uncaught ReferenceError: a is not defined let a = 1;
在執行的時候直接拋出範圍錯誤,若這樣改一下,就沒有錯誤:
let a = 1; // a: 1 let b = a + 1; // b: 2
const 和let在變數提升方面的表現是一致
#重複聲明var a = 1; var a = 2; var b = a + 1; // 3首先是宣告變數a ,初始化為1緊接著再次宣告變數a, 初始化為2
let a = 1; let a = 2; // Uncaught SyntaxError: Identifier 'a' has already been declared
var a = 1; let a = 2; //Uncaught SyntaxError: Identifier 'a' has already been declared
const 和let 在重複宣告方面的表現是一致
var num = 5; function factorial(num) { var result = 1,resultValue = 0; for (let i = num - 1; i >= 1; i--) { if (i === num - 1) { resultValue = num * i; }else{ resultValue = num * i / num; } result *= resultValue; } // i 是用 let 进行定义它的作用域仅仅被限制在 for 循环的区域内 // i++;// Uncaught ReferenceError: i is not defined return result; } // result 是用 var 进行定义,他的活动区域在 factorial 函数内 // result++; // var的作用域.html:34 Uncaught ReferenceError: result is not defined factorial(num); // 120const 和let 在作用域的範圍的表現也是一樣
範例二,驗證const 的作用域:
{ const NUM_1 = 10; } let b = NUM_1 + 1; // Uncaught ReferenceError: NUM_1 is not defined
範例三,驗證var 可以定義全域變量,let 和const 只能定義局部變數
// 可以挂载到全局作用域上 // var name = 'window scoped'; let name = 'let scoped'; //是不挂载到全局作用域中 let obj = { name: 'myName', sayName () { return function () { console.log(this.name); // 打印出来为空 }; } } obj.sayName()(); console.log(window); //name 这个属性的值没有,如下图
若这样改一下就可以得到我们想要的值:
这个同时也涉及到新问题 this 的指向。后面的文章再详细举例验证
const 与 let , var 其实还是有些地方不一样的
例子1:验证 const 的特殊之处(一)<br>
const NUM = 100; NUM = 1000; // Uncaught TypeError: Assignment to constant variable
但是也有例外
例子二:验证 const 的特殊之处(二)
const obj = { name: 'xiaoMing', sayName () { return this.name } }; obj.sayName(); // xiaoMing obj.name = 'xiaoHong'; obj.sayName(); // xiaoHong
若这样改一下: <br> 例子三:验证 const 的特殊之处(三)
const obj = { name:'xiaoMing', sayName(){ return this.name } }; obj = {}; // Uncaught TypeError: Assignment to constant variable
更多编程相关知识,请访问:编程视频!!
以上是javascript宣告變數的4種方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!