日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript-变量的作用域 、const、let

發布時間:2024/9/27 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript-变量的作用域 、const、let 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作用域

局部函數

在javascript中,var定義變量實際是有作用域的。
假設在函數體中聲明,則在函數體外不可以使用~(如果非要使用的話,可以用閉包)

function qj() {var x = 1;x = x + 1; } x = x + 2; // Uncaught ReferenceError: x is not defined

如果兩個函數使用了相同的變量名,只要在函數內部,就不沖突

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) }


假設,內部函數變量和外部函數的變量,重名!

function qj() {var x = 1;function qj2() {var x = 'A';console.log('內 '+x)}qj2()console.log('外 '+x)} qj()

假設在JavaScript中函數查找變量從自身函數開始~,由 “內” 向 “外” 查找,假設外部存在這個同名的函數,則內部函數會屏蔽外部函數的變量。


提升變量的作用域

function qj() {var x = 'X' + y;console.log(x)var y = 'y'; }

結果: Xundefined
說明:JavaScript執行引擎,自動提升了y的聲明,但是不會提升變量y的賦值,等價于:

function qj() {var y;var x = 'X' + y;console.log(x)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文件,使用了相同的全局變量,就會沖突~ -->如何能夠減少沖突?

// 唯一全局變量 var wangApp = {};// 定義全局變量 wangApp.name = 'wang'; wangApp.add = function (a,b) {console.log(a+b);return a+b; }

把自己的代碼全部放入自己定義的唯一空間名字中,降低全局命名沖突的問題~


局部作用域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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。