var声明变量的作用域限制在其声明位置的上下文中
var x = 0; // x是全局变量,并且赋值为0。 console.log(typeof z); // undefined,因为z还不存在。 function a() { // 当a被调用时, var y = 2; // y被声明成函数a作用域的变量,然后赋值成2。 console.log(x, y); // 0 2 function b() { // 当b被调用时, x = 3; // 全局变量x被赋值为3,不生成全局变量。 y = 4; // 已存在的外部函数的y变量被赋值为4,不生成新的全局变量。 z = 5; // 创建新的全局变量z,并且给z赋值为5。 } // (在严格模式下(strict mode)抛出ReferenceError) b(); // 调用b时创建了全局变量z。 console.log(x, y, z); // 3 4 5 } a(); // 调用a时同时调用了b。 console.log(x, z); // 3 5 console.log(typeof y); // undefined,因为y是a函数的本地(local)变量。
let 声明的变量只在其声明的块或子块中可用,var的作用域是整个封闭函数
function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); // 2 } console.log(x); // 2 } function letTest() { let x = 1; if (true) { let x = 2; // 不同的变量 console.log(x); // 2 } console.log(x); // 1 }
在 ECMAScript 2015 中,let绑定不受变量提升的约束,这意味着let声明不会被提升到当前执行上下文的顶部。
在块中的变量初始化之前,引用它将会导致 ReferenceError(而使用 var 声明变量则恰恰相反,该变量的值是 undefined )
当在块中使用时,let将变量的作用域限制为该块。注意var的作用域在它被声明的函数内的区
var a = 1; var b = 2; if (a === 1) { var a = 11; // the scope is global let b = 22; // the scope is inside the if-block console.log(a); // 11 console.log(b); // 22 } console.log(a); // 11 console.log(b); // 2
const 常量必须在声明的同时指定它的值.
const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的(如引用内容是对象),只是变量标识符不能重新分配一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称
// 注意: 常量在声明的时候可以使用大小写,但通常情况下全部用大写字母。 // 定义常量MY_FAV并赋值7 const MY_FAV = 7; // 报错 MY_FAV = 20; // 输出 7 console.log("my favorite number is: " + MY_FAV); // 尝试重新声明会报错 const MY_FAV = 20; // MY_FAV 保留给上面的常量,这个操作会失败 var MY_FAV = 20; // 也会报错 let MY_FAV = 20; // 注意块范围的性质很重要 if (MY_FAV === 7) { // 没问题,并且创建了一个块作用域变量 MY_FAV // (works equally well with let to declare a block scoped non const variable) let MY_FAV = 20; // MY_FAV 现在为 20 console.log('my favorite number is ' + MY_FAV); // 这被提升到全局上下文并引发错误 var MY_FAV = 20; } // MY_FAV 依旧为7 console.log("my favorite number is " + MY_FAV); // 常量要求一个初始值 const FOO; // SyntaxError: missing = in const declaration // 常量可以定义成对象 const MY_OBJECT = {"key": "value"}; // 重写对象和上面一样会失败 MY_OBJECT = {"OTHER_KEY": "value"}; // 对象属性并不在保护的范围内,下面这个声明会成功执行 MY_OBJECT.key = "otherValue"; // 也可以用来定义数组 const MY_ARRAY = []; // It's possible to push items into the array // 可以向数组填充数据 MY_ARRAY.push('A'); // ["A"] // 但是,将一个新数组赋给变量会引发错误 MY_ARRAY = ['B']
下面介绍下在javascript中有三种声明变量的方式:var、let、const。
var 声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。
for(var i=0;i<=1000;i++){ var sum=0; sum+=i; } alert(sum);
声明在for循环内部的sum,跳出for循环一样可以使用,不会报错正常弹出结果
let:声明块级变量,即局部变量。
在上面的例子中,跳出for循环,再使用sum变量就会报错,有着严格的作用域,变量只作用域当前隶属的代码块,不可重复定义同一个变量,不可在声明之前调用,必须先定义再使用,会报错,循环体中可以用let
注意:必须声明'use strict';后才能使用let声明变量否则浏览并不能显示结果,
const:用于声明常量,也具有块级作用域 ,也可声明块级。
const PI=3.14;
它和let一样,也不能重复定义同一个变量,const一旦定义,无法修改。
总结
以上所述是小编给大家介绍的JavaScript变量声明var,let.const及区别浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍浅谈JavaScript中定义变量时有无var声明的区别,包括了浅谈JavaScript中定义变量时有无var声明的区别的使用技巧和注意事项,需要的朋友参考一下 前段时间回答了一个关于定义变量时使用关键字var与否的区别,总结回顾一下。 1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量。 使用var定义: 不使用var定义: 2.在全局作用域下,使用v
本文向大家介绍浅析JavaScript声明变量,包括了浅析JavaScript声明变量的使用技巧和注意事项,需要的朋友参考一下 JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用域是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量。 定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指
问题内容: “ var”是可选的吗? 如同 ? 我发现它们都可以通过我的测试工作,我认为这是可选的。那正确吗? 问题答案: 他们的意思不同。如果使用变量,则在范围内声明变量(例如,在函数中)。如果不使用,则变量会在作用域的各个层中冒出气泡,直到遇到给定名称的变量或全局对象(如果在浏览器中是窗口,则为窗口),然后将变量附加到该变量。这与全局变量非常相似。但是,仍然可以使用删除它(很可能是其他人的代码
问题内容: 如果声明变量而不使用“ var”,则变量始终变为GLOBAL。 在函数内部声明全局变量是否有用?我可以想象在某个事件处理程序中声明一些全局变量,但这有什么用呢?更好地使用RAM? 问题答案: 不,没有RAM好处或类似的好处。 w3schools谈论的是我所说的“内隐全球性恐怖” 。考虑以下功能: 看起来很简单,但是由于线路上的错字,它返回,而不是。并创建一个带有输入错误名称的全局变量:
问题内容: 声明变量之间有什么区别: …这条路: …要么: 在全球范围内? 问题答案: 是的,有一些差异,尽管实际上它们通常并不大。 还有第四种方法,从ES2015(ES6)开始,还有另外两种方法。我在最后添加了第四种方式,但是在#1之后插入了ES2015方式(您会看到原因),因此我们有: 这些陈述解释了 #1 这将创建一个全局变量,该变量也是全局对象的属性,我们可以像在浏览器上一样(或通过非严格
本文向大家介绍JavaScript声明变量时为什么要加var关键字,包括了JavaScript声明变量时为什么要加var关键字的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。 诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误