在js中定义变量的时候,我们习惯了用var,其实省略var也可以用的。
-
JavaScript中使用var定义变量和不使用var定义变量的区别
2018-12-01 12:46:46JavaScript中使用var定义变量和不适用var定义变量的区别 1、不使用var定义一个变量 不使用var定义一个变量时是定义了全局对象window的一个属性,事实上你无论在代码中的任何一个部分(全局或者在某一代码块中)声明...JavaScript中使用var定义变量和不使用var定义变量的区别
1、不使用var定义一个变量
不使用var定义一个变量时是定义了全局对象window的一个属性,事实上你无论在代码中的任何一个部分(全局或者在某一代码块中)声明的都是一个全局变量,可以通过delete运算删除该属性(变量)2、使用var定义一个变量
使用var定义一个变量时,事实上你仍旧是在定义一个window的属性,但是这个属性是不可配置的,也就是说无法通过调用delete运算来删除该属性,而且var声明的变量涉及到作用域的问题,即:局部变量和全局变量;你可以浏览关于ECMAscript6标准的第一章节或者一些深入解析JavaScript的书籍、博客或者官方文档来了解关于局部变量和全局变量(作用域)方面的知识。
-
javascript中的var定义的变量和没有var定义变量的区别
2014-06-18 17:24:01在javascript中,定义变量有两种方式: var i = 0; i = 0;这两种方式都对,只不过是...区别在于如果没有var定义的变量,javascript会默认该变量时全局变量,而如果有了var的定义的话,会限制该变量的范围。当然如果在javascript中,定义变量有两种方式:
这两种方式都对,只不过是有区别的。区别在于如果没有var定义的变量,javascript会默认该变量时全局变量,而如果有了var的定义的话,会限制该变量的范围。当然如果一开始var定义的变量就是全局变量,那么也就没什么区分了。看下面代码:var i = 0; i = 0;
<
script
>
var a=1;
b=2;
function a(){
c=3;
var d=4;
}
alert(a);
alert(b);
alert(c);
alert(d);//这个就会报错,因为它不是全局变量
</
script
>
-
js 中使用var与省略var 定义变量的区别
2018-01-22 17:05:00在js中定义变量的时候,我们习惯了用var,其实省略var也可以用的。...2、省略var定义变量,如a = "sss", 定义了一个全局变量对象a,a没有被delete掉前,我们可以直接在浏览器console输入a即 可看到结果,在任何一...今天总结一下,使用var或省略var 定义变量的区别1、var 私有变量,只能在当前js使用,或者在当前作用域使用,定义私有变量,不能delete;2、省略var定义变量,如a = "sss", 定义了一个全局变量对象a,a没有被delete掉前,我们可以直接在浏览器console输入a即 可看到结果,在任何一个js都可以调用这个对象,可以选择delete。不建议省略var,省略var的时候要慎重省略var会带来以下:1. 语义不清楚。2. 团队开发时,容易覆盖掉其它作用域内的变量,引发异常。3. 给window对象添加不必要成员,也就是给window带来不必要的污染,所以用完最好顺便delete掉,以免影响其他变量转载于:https://www.cnblogs.com/qijuzi/p/8329994.html
-
js变量中有var定义和无var定义的区别,es6中let命令和const命令
2017-02-19 15:01:41之前我们在写js代码的时候都知道可以用var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是并不知道两者的区别... var x = 1; y = 4; console.log(x);//1 console.log(y);//4 console.log...之前我们在写js代码的时候都知道可以用var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是并不知道两者的区别...
var x = 1; y = 4; console.log(x);//1 console.log(y);//4 console.log(window.x);//1 console.log(window.y);//4
简单测试下可以知道定义的x和y都被挂载在window对象上,变为window下的属性,这并不能说明什么...
delete x; delete y; console.log(window.x);//1 console.log(window.y);//undefined
再看看执行上面代码之后x属性没有被删除,y被删除了,这是区别就来了在通过var进行定义后的变量不能被delete删除,这是什么原因?ECMAScript 5标准中,可以通过Object.getOwnPropertyDescriptor()来获取对象自身某个property的属性信息:
console.log(Object.getOwnPropertyDescriptor(window,"x")); console.log(Object.getOwnPropertyDescriptor(window,"y"));
得到如下信息:当不使用var进行定义是,变量默认的configurable为true,可以进行delete等命令进行操作,而当var在定义一个全局变量的时候configurable 变为了false,即不会被delete删除.
此外,简单说一下关于变量提升问题
alert(a);//Uncaught ReferenceError: a is not defined a = 100;
先说第二段代码,var声明的全局变量b在js中会进行代码提升,也就是说var b = 200;会被分解为var b;b=200;代码解析的第时候会将var b;提升到最前面,并且在内存中开辟一个空间,由于b没有被赋值,默认为undefined.第一段代码中当js执行alert()函数时候由于没有进行var声明,变量没有被提升,不存在内存开辟,所以在alert时候直接报错!alert(b);//undefined var b = 200;
在ECMAScript6标准中,一个重要的概念就是"JavaScript严格模式",需要在最前面加上"use strict";
let注意点:
1.let拥有块级作用域,一个{}就是一个作用域
2.let在其作用域下面不存在变量提升
3.let在其作用域中不能被重复声明(函数作用域和块级作用域)
第一点:let的块级作用域
注意:以下代码都在严格模式下执行的
表示外层代码块不受内层代码块的影响,如果是用var定义的变量n,那么输出的就是修改后的50.let n = 10; if(true){ let n = 50; } console.log(n);//10
第二点:变量提升问题
alert(a);//Uncaught ReferenceError: a is not defined let a = 100;
不同var,let不存在变量提升,以上写法会直接报错.
第三点:重复声明问题
let在同一个作用域下不允许进行重复变量声明.否则也是直接报错!!!(function(){ let lTest = "let"; var vTest = "var" let lTest = "let changed";//Uncaught SyntaxError: Identifier 'lTest' has already been declared var vTest = "var changed"; console.log(lTest); console.log(vTest); })();
const命令const用来声明常量,一旦声明,其值就不可以更改,如果你非得修改变量的值,js不会报错,只是默默表示失败(不起作用)
const的作用域与let相同,只在声明所在的块级作用域内有效,并且也是和let一样不可以重复进行声明.
-
[js点滴]使用var定义变量和不使用var的本质区别
2016-10-18 00:07:14不使用var定义变量和使用var的区别 最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了 “不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量”。这貌似... -
javascript中使用var和不使用var定义变量的区别
2018-02-27 16:45:27JavaScript中使用var和不使用var定义变量主要有两个区别: 1.var a = 1; function aaa(){ b = 2; }; console.log(a);//1 //console.log(b);//b if not defined aaa(); console.log(b);//2代码... -
var定义在if语句中变量会不会提升
2019-08-18 20:51:23console.log(a); if (false/true) { var a = 1; } //undefined console.log(i); for (var i = 1; i < 5; i++) { ...在if/for语句var定义的变量会提升(在严格模式下一样)(chrome/firefox/IE) ... -
var定义的变量不能用delete删除
2018-07-01 17:48:191、delete只能删除不是通过var定义的变量var deletefalse='删除不了' undefined deletetrue='能删除' "能删除" delete deletefalse false delete deletetrue true deletefalse "删除不了" ... -
JS中通过var定义全局变量与在window对象上直接定义属性的区别
2019-04-04 17:32:12JavaScript通过var定义全局变量与在window对象上直接定义属性的区别关于window区别一区别二区别三 关于window 一、所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。 二、全局变量是 window ... -
js中关于作用域(var定义的变量)的解析:
2019-08-10 11:04:27带var定义的变量:会将声明提升到全局作用域的顶端。 console.log(a);//undefined var a = ‘哈哈’; console.log(a);//哈哈 解析:在控制台打印第一个a输出undefined是因为a在下面用var定义了。 声明提升情况... -
var 定义类中的变量
2012-11-15 10:41:13用var定义的变量如果没有加protected 或 private则默认为public。在类的内部和外部都可以访问。 public是定义property(属性)和method(方法)的可见性的关键字,用public修饰的属性和方法在类的内部和外部都可以... -
js var定义变量
2018-08-27 01:51:50var num = 1; 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable);如果是在全局域中声明,则为全局变量。 而 num = 1; 事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在... -
let和var定义变量的区别
2018-05-06 18:05:33二、声明后未赋值,表现相同 var varTest; let letTest; console.log(varTest); //输出undefined console.log(letTest); //输出undefined也即是说声明后直接使用输出都是一样的undefined三、... -
javaScript中使用var和不是用var定义变量的区别
2017-01-20 16:39:29javaScript与java、c语言虽然有很多相同,但是也存在区别 JavaScript的变量没有块范围 ... var scope="全集变量"; function test(){ //全局变量被局部变量覆盖 document.writeln(scope+"") //定义scope -
js中let和var定义变量的区别
2015-09-28 10:30:08本文对比了js中let和var关键字在声明变量时的异同之处。 -
JavaScript中 let 和 var 定义变量说明
2018-04-14 15:04:10语法let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];参数var1, var2, …, varN变量名。可以是任意合法的标识符。value1, value2, …, valueN变量的初始值。可以是任意合法的表达式。描述let... -
ts和js中let和var定义变量的区别
2017-12-18 17:48:12重复定义let: class Test { public name: string = " Test " ; public run(){ let a; //该行报错 Cannot redeclare block-scoped variable 'a'. var b; let a; var b; //该行报错 ...