ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用var声明与不用var声明区别

2022-03-28 06:00:19  阅读:107  来源: 互联网

标签:console 变量 区别 window var 全局变量 声明


用var声明与不用var声明有两个场景
全局作用域时:
① var声明有变量提升var a = 10;不用则没有变量提升b = 5
如果顶部直接console.log(b)未声明变量会报错:未找到
//但是使用window.b则不会报错并打印undefined;
//是因为未声明直接赋值会被隐式声明为全局变量,但隐式声明的全局变量严格来说不是真正的变量,而是全局对象window的属性
//此时就算你window.一个没有声明也没有赋值的属性,它也会打印undefined,
//用一个不存在的变量会出错;但是用一个不存在的属性,会返回undefined值
当你在b = 5;后打印console.log(window.b),window的属性b会被赋值,输出5
在b = 5;后打印console.log(b),window的属性b会被赋值,输出5 //未声明直接赋值会被隐式声明为'全局变量',再赋值

如果顶部直接console.log(a);//会在全局作用域找a变量,也就是var声明的a,因变量提前,输出undefined
在var a = 10;后打印console.log(window.a)或console.log(a),都输出10

② 使用var定义的变量不可以delete删除,没有var 定义的变量可以delete删除
//未声明直接赋值会被隐式声明为全局变量
//隐式声明的全局变量严格来说不是真正的变量,而是全局对象的属性,属性可以通过delete删除,而变量不可以

 

函数作用域时:
① var声明变量有变量提升,并且是局部变量,外部无法访问

② 无var声明变量没有变量提升,会被隐式声明变为全局变量,外部可以访问
但要注意外部访问时要放在调用函数后,并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句

 

注意:在ES5的'use strict'模式下,如果变量没有使用var定义,就会报错

标签:console,变量,区别,window,var,全局变量,声明
来源: https://www.cnblogs.com/TANM/p/16065435.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有