③写给后端工程师的JavaScript教程——变量申明

来源:互联网 发布:淘宝手机店铺怎么装修 编辑:程序博客网 时间:2024/06/14 18:42

变量申明

变量申明方法及不声明使用

在JavaScript中使用变量之前一般情况下是需要申明的,一般是使用var关键字来申明一个变量。例如:

var statement="本系列教程由魏永强5月22日发布在个人CSDN博客";

但是如果不声明能不能使用呢?如果有如下的代码

console.log(a);//因为statmentStr事先并未申明过所以会报错,报错内容如下

这里写图片描述
会报一个变量未定义错误。那么我们能不能不加var直接来初始化一个变量呢?

statment="本系列教程由魏永强5月22日发布在个人CSDN博客,复制或转载请写明出处";console.log(statment);

可以发现以上的语句是可以正常的输出的。那么究竟加不加var,两者有什么区别呢?我们通过以下代码来看看他们的区别。

statmenta="this is var a";var statmentb="this is var b";console.log(global);

这里写图片描述

可以发现没有用var声明的变量是直接加载了global对象中的一个属性中。这样看起来他和全局变量类似,其实他不能成为一个全局变量只是被加载了global的属性中而已。

而使用var声明的变量叫做不可配置属性,也就是说这样声明后不能使用delete运算来删除属性。例如:

statmenta="this is var a";var statmentb="this is var b";console.log(delete statmenta);console.log(delete statmentb);console.log(statmentb);console.log(statmenta);

执行结果如下:
这里写图片描述
可以看到delete删除statmenta属性和statmentb属性的结果分别是true和false也就是说statmentb没法删除。因为他是用var来声明的,而statmenta被成功删除,删除后再打印时报了not defined错误。

所以在使用中要对变量合理的声明,尽量使用var来声明,这是比较规范的写法。

声明提前

这个其实是一个非正式的叫法。我们需要思考的是如果对于一个变量没有声明直接调用会报错,那么如果我在调用之后的声明会出现生么情况呢?直接看代码:

console.log(statment); //使用之前是没有声明的var statment = "最近codes51抓取csdn博客文章而且任意篡改发布时间和作者!";运行结果为:undefined

也就是说并没有报错。但是也没有输出正确的值。那我们在声明之后也输出一次对比一下效果呢:

console.log(statment); //使用之前是没有声明的var statment = "最近codes51抓取csdn博客文章而且任意篡改发布时间和作者!";console.log(statment);

这里写图片描述

可以看出第一次输出的是undefined,在初始化之后输出的为正确的值。

这种现象叫做声明提前。在函数或者文件中对于变量的声明会提前到函数或者文件的最开始,但是对于变量的赋值会在其被初始化的位置。
对于变量部分最需要注意的就是这些问题,其他和我们后端开发中的差别不大,比如变量的作用域

原创粉丝点击