我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JS变量中有var定义和无var定义的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JS变量中有var定义和无var定义的区别

这篇文章主要讲解了“JS变量中有var定义和无var定义的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS变量中有var定义和无var定义的区别”吧!

 之前我们在写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"));

得到如下信息:

JS变量中有var定义和无var定义的区别

当不使用var进行定义是,变量默认的configurable为true,可以进行delete等命令进行操作,而当var在定义一个全局变量的时候configurable 变为了false,即不会被delete删除.

此外,简单说一下关于变量提升问题

alert(a);//Uncaught ReferenceError: a is not defined
a = 100;alert(b);//undefined

var b = 200;先说第二段代码,var声明的全局变量b在js中会进行代码提升,也就是说var b = 200;会被分解为var b;b=200;代码解析的第时候会将var b;提升到最前面,并且在内存中开辟一个空间,由于b没有被赋值,默认为undefined.第一段代码中当js执行alert()函数时候由于没有进行var声明,变量没有被提升,不存在内存开辟,所以在alert时候直接报错!

在ECMAScript6标准中,一个重要的概念就是"JavaScript严格模式",需要在最前面加上"use strict";

let注意点:

1.let拥有块级作用域,一个{}就是一个作用域

2.let在其作用域下面不存在变量提升

3.let在其作用域中不能被重复声明(函数作用域和块级作用域)

第一点:let的块级作用域

注意:以下代码都在严格模式下执行的

let n = 10;
if(true){
 let n = 50;
}
console.log(n);//10表示外层代码块不受内层代码块的影响,如果是用var定义的变量n,那么输出的就是修改后的50.

第二点:变量提升问题

alert(a);//Uncaught ReferenceError: a is not defined
let a = 100;

不同var,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);
})();

let在同一个作用域下不允许进行重复变量声明.否则也是直接报错!!!

const命令

const用来声明常量,一旦声明,其值就不可以更改,如果你非得修改变量的值,js不会报错,只是默默表示失败(不起作用)

const的作用域与let相同,只在声明所在的块级作用域内有效,并且也是和let一样不可以重复进行声明.

感谢各位的阅读,以上就是“JS变量中有var定义和无var定义的区别”的内容了,经过本文的学习后,相信大家对JS变量中有var定义和无var定义的区别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JS变量中有var定义和无var定义的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JS中let和var的区别有哪些

这篇文章将为大家详细讲解有关JS中let和var的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.作用域的不同:{ let a = 10; var b = 1; } a // Refer
2023-06-14

变量定义与声明的区别详细解析

外部变量(全局变量)的"定义"与外部变量的"声明"是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)
2022-11-15

编程中声明和定义有什么区别

这篇文章主要为大家展示了“编程中声明和定义有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“编程中声明和定义有什么区别”这篇文章吧。一般解释来说:声明是告诉编译器存在这么一个标识符。定义则
2023-06-17

学习Golang中的变量定义和赋值

Golang中变量的定义与赋值,需要具体代码示例在Golang中,变量的定义和赋值是非常简单和直观的。本文将通过具体的代码示例来介绍Golang中变量的定义和赋值。首先,我们来看看Golang中变量的定义。在Golang中,变量的定义可
学习Golang中的变量定义和赋值
2024-01-18

Java中成员变量的定义规则有哪些

在Java中,成员变量的定义规则包括以下几点:1. 成员变量必须先声明,后使用。在类的成员位置上声明,但不在任何方法、构造方法或代码块中。2. 成员变量可以被修饰符修饰,如public、private、protected等。3. 成员变量可
2023-08-31

PHP 预定义函数和用户自定义函数的执行顺序有什么区别?

php 执行函数遵循特定顺序:1. 预定义函数(最高优先级);2. 用户自定义函数(按声明顺序)。预定义函数优先于自定义函数,例如 echo() 在 myfunction() 之前执行。PHP 预定义函数与自定义函数的执行顺序概览PHP
PHP 预定义函数和用户自定义函数的执行顺序有什么区别?
2024-04-17

c/c++中变量的声明和定义深入解析

“声明”为编译服务,用于类型检查 ;“定义”在运行时会分配空间,不能重复定义,同时具备声明的功能
2022-11-15

php中预定义数组$_post和$_get的区别是什么

区别:1、“$_GET”用于收集来自“method="get"”的表单中的值,而“$_POST”用于收集来自“method="post"”的表单中的值;2、“$_GET”的内容都会显示在URL中,而“$_POST”不会。
2014-11-27

win7安装中升级安装和自定义安装有什么区别

U盘的小巧和便捷深受用户们的喜爱,相信众多用户都喜欢用它作为存储数据和传输文件的小工具,对于一些比较追求个性化的朋友们会觉得每次U盘的图标都是一个样显得很单调,就想要更改http://www.cppcns.com一下U盘 安装Window
2023-06-05

编程热搜

目录