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

2022/3/28 6:52:36

本文主要是介绍用var声明与不用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定义,就会报错



这篇关于用var声明与不用var声明区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程