javascript
JavaScript-变量的作用域 、const、let
作用域
局部函數
在javascript中,var定義變量實際是有作用域的。
假設在函數體中聲明,則在函數體外不可以使用~(如果非要使用的話,可以用閉包)
如果兩個函數使用了相同的變量名,只要在函數內部,就不沖突
function qj() {var x = 1;x = x + 1; } function qj2() {var x = 'A';x = x + 1; }內部函數可以訪問外部函數的成員,反之則不行
function qj() {var x = 1;console.log(x)// 內部函數可以訪問外部函數的成員,反之則不行function qj2() {var y = x + 1;console.log(y)}qj2()var z = y + 1;console.log(z) }
假設,內部函數變量和外部函數的變量,重名!
假設在JavaScript中函數查找變量從自身函數開始~,由 “內” 向 “外” 查找,假設外部存在這個同名的函數,則內部函數會屏蔽外部函數的變量。
提升變量的作用域
function qj() {var x = 'X' + y;console.log(x)var y = 'y'; }結果: Xundefined
說明:JavaScript執行引擎,自動提升了y的聲明,但是不會提升變量y的賦值,等價于:
這個是在JavaScript建立之初就存在的特性,養成規范:所有變量定義都放在函數的頭部,不要亂放,便于代碼維護;
function qj2() {var x = 1,y = x + 1,z,i,a;//undefined// 之后隨意使用 }全局函數
// 全局變量 x = 1; function f() {console.log(x) } f() console.log(x)全局對象window
var x = 'xxx'; alert(x) alert(window.x) // 默認所有的全局變量,都會自動綁定在Window對象下alert()這個函數本身也是一個Window變量,使用window.alert()是一樣的
var x = 'xxx'; window.alert(x) var old_alert = window.alert; window.alert = function () { } // 發現alert()失效了 window.alert(123) // 恢復 window.alert = old_alert window.alert(456)Javascript實際上只有一個全局作用域,任何變量(函數也可以視為變量),假設沒有在函數作用范圍內找到,就會向外查找,如果在全局作用域都沒有找到,報錯ReferenceError
規范
由于我們所有的全局變量都會綁定到我們的window上,如果不同的js文件,使用了相同的全局變量,就會沖突~ -->如何能夠減少沖突?
把自己的代碼全部放入自己定義的唯一空間名字中,降低全局命名沖突的問題~
局部作用域let
function aa() {for (var i = 0; i < 100; i++) {console.log(i)}console.log(i+1); // 101 問題? i 出了這個作用域還能使用 }ES6 let關鍵字,解決局部作用域沖突問題!
function aa() {for (let i = 0; i < 100; i++) {console.log(i)}console.log(i+1); // Uncaught ReferenceError: i is not defined }建議大家都使用let去定義局部作用域的變量。
常量 const
在ES6之前,怎么定義常量:只有用全部大寫字母命名的變量就是常量;建議不要修改這樣的值
var PI = '3.14'; console.log(PI) PI = '132'; // 可以修改成功 console.log(PI)在ES6引入了常量關鍵字const
const PI = '3.14'; console.log(PI) PI = '132'; // Uncaught TypeError: Assignment to constant variable. console.log(PI)https://www.bilibili.com/video/BV1JJ41177di?p=13&spm_id_from=pageDriver
總結
以上是生活随笔為你收集整理的JavaScript-变量的作用域 、const、let的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 104. 二叉树的最大深度【LeetCo
- 下一篇: Vite --- 创建Vue3项目