首页 » SEO优化 » html声明php技巧_JavaScript声明变量的办法特点与差异

html声明php技巧_JavaScript声明变量的办法特点与差异

访客 2024-11-26 0

扫一扫用手机浏览

文章目录 [+]

var声明变量

var name = \公众bob\"大众;

var声明变量的特点:

html声明php技巧_JavaScript声明变量的办法特点与差异

存在变量提升机制,JS引擎碰着var声明,会将其声明提到浸染域顶端。

console.log(name);var name = \公众bob\公众;覆盖全局工具存在的变量

var RegExp = \"大众myRegExp\公众;console.log(window.RegExp); // 覆盖了正则表达式工具,输出 “myRegExp”

let声明变量

html声明php技巧_JavaScript声明变量的办法特点与差异
(图片来自网络侵删)

let声明变量的特点:

不许可重复声明变;不存在变量提升机制;只在当前浸染域内有效;临时去世区(TDZ)- 利用未实行过的变量会报错。

let name = \"大众bob\"大众;

const声明常量

const声明变量的特点

声明常量,声明时必须赋值;不许可重复声明变;不存在变量提升机制;只在当前浸染域内有效;临时去世区(TDZ)- 利用未实行过的变量会报错;常量声明后不许可修正其值(下面有详细的解释)。

const USER_NAME = \"大众Bob\"大众;

声明变量或者常量都会在内存中开辟一个内存地址来装载这个变量的值,const声明的常量后,就不许可改变这个常量所在的内存地址了,但是可以修正这个绑定的内存地址的值,比如来说,String类型的值是不可改变的,以是利用const声明一个字符串的常量之后就不许可修正了,比较声明了一个工具类型的常量,就可以修正其工具的值,由于修正的是其工具(绑定的常量的地址的值)的值,而不是修正绑定常量的地址。

const USER = { name: 'bob', nationality: 'China'}USER.name = 'Lynn';console.log(USER); // 输出: { name: 'Lynn', nationality: 'China' }// 缺点:TypeError: Assignment to constant variable.// 缘故原由:修正了绑定的内存地址USER = { name: 'Lynn', nationality: 'China'}console.log(USER);

变量提升机制与TDZ(临时去世区)

JavaScript引擎在扫描代码变量声明时:

如果扫描到 var 声明的变量 => 会将其提升到浸染域的顶端,此时其值是undefined;这便是var声明的变量提升机制。

&&

如果扫描到 let 或 const 声明的变量 => 会将其放入到 TDZ 中,如果访问TDZ中的变量就会报错,只有实行过了变量声明,变量才会从TDZ中移除,才能正常访问,这便是为什么浸染域中存在let和const声明的变量,如果没实行到变量声明,会抛出错误的缘故原由。

// var 变量提升机制console.log(name); // undefinedvar name = \"大众bob\公众;// let 与 const 的临时去世区(TDZ)console.log(name); // ReferenceError: name is not definedlet name = \公众bob\"大众;console.log(USER_NAME); // ReferenceError: USER_NAME is not definedconst USER_NAME = \公众bob\"大众;

实例-循环中的块级浸染域绑定

由于在for循环中利用var声明变量,既没有存在块级浸染域,也存在了一贯共用同一个变量。

var arr = []for (var i = 0; i < 10; i++) { arr[i] = function test() { console.log(i); }}arr[1]() // 10arr[3]() // 10arr[5]() // 10arr[7]() // 10// 为什么都输出是10,缘故原由是arr[i]的各项函数不是立即实行的,在表面调用利用,for循环已经结束,i的值是10

利用立即实行函数能到达效果:

var arr = []for (var i = 0; i < 10; i++) { (arr[i] = function test(value) { console.log(value); // 0,1,2,3,4,5,6,7,8,9 })(i)}

利用let块级声明

var arr = []for (let i = 0; i < 10; i++) { arr[i] = function test() { console.log(); }}arr[0]() // 0arr[3]() // 3arr[5]() // 5arr[7]() // 7// 为什么修正let声明后到达了预期中的效果?// 缘故原由:let声明的变量是存在块级浸染域,每次循环的i实在都是一个新的变量

末了

ES6添加了let与const声明变量后,推举声明变量时默认利用const,如果须要修正改变该值时,利用let声明变量,使工程师写JS代码时变得更加健壮。

作者:梁凤波

链接:https://www.imooc.com/article/275459

标签:

相关文章

语言枚举类型,探索人类语言多样性的奥秘

语言是人类交流的重要工具,也是人类文明发展的重要标志。随着全球化进程的不断推进,各种语言枚举类型应运而生。本文将从语言枚举类型的定...

SEO优化 2024-12-29 阅读0 评论0

语言栏消失,科技变革下的挑战与机遇

近年来,随着科技的飞速发展,智能手机、平板电脑等移动设备的普及,语言栏这一功能已经成为了我们日常生活中不可或缺的一部分。近期有消息...

SEO优化 2024-12-29 阅读0 评论0

语言混合现象的多元魅力与挑战

语言混合作为一种跨文化交流的现象,逐渐成为世界范围内语言学研究的热点。它不仅丰富了语言的多样性,也反映了全球化背景下人类社会的交流...

SEO优化 2024-12-29 阅读0 评论0

语言是思想的载体,介绍语言与思想的关系

在人类文明的进程中,语言一直扮演着至关重要的角色。它不仅是人们沟通交流的工具,更是承载着人类思想的载体。自古以来,人们就深知语言与...

SEO优化 2024-12-29 阅读0 评论0