龙空技术网

你应该要掌握的,前端开发中的Javascript规范

前端周老师 1477

前言:

目前各位老铁们对“js变量污染”都比较关心,你们都想要知道一些“js变量污染”的相关知识。那么小编在网上汇集了一些对于“js变量污染””的相关内容,希望姐妹们能喜欢,朋友们一起来了解一下吧!

前言

在之前的一篇文章《前端开发过程中的HTML规范,来学习一下吧》中,我们有讲过前端开发过程中需要注意到的HTML规范问题,今天这篇文章我们继续来看下关于Javascript的规范问题。

Javascript

全局命名与IIFE

我们总是会在Javascript文件中定义变量,但是一不留神就会将其定义成全局变量,如果引用的外部JS文件较多,很容易出现全局变量污染的情况。

我们不推荐总是在全局空间定义变量的行为,因为所有在全局空间定义的变量都是挂在window对象上,很容易出现变量污染,如下所示。

不推荐-全局变量

IIFE就可以防止出现全局变量污染的情况,IIFE是立即执行的函数表达式,在IIFE内部会创建一个封闭的作用域,内部定义的变量不会影响外部的执行环境,而且可以通过参数传递的形式引用外部变量,最重要的一点是在函数执行完后会立即释放占用的内存。

我们推荐使用下面这种写法。

推荐写法-IIFE

IIFE用法

为了避免全局变量的干扰,我们建议所有脚本文件都从IIFE开始。

我们都知道之所以叫立即执行的函数表达式,是因为在函数表达式后面会多一个执行的括号。这个执行的括号可以出现在两个地方,不管是在内部还是外部,都是有效的。但是为了让整个函数表达式看起来像一个整体,我们推荐将括号写在里面。

因此我们不推荐以下写法。

不推荐写法

而推荐以下写法。

推荐写法

同样,我们可以通过参数传递的形式引用外部变量。

引用外部变量

定义域和变量提升

我们都知道在ES5中是没有块级作用域概念的,只有函数级作用域,而且由于变量提升的存在,在函数内部声明的变量都会提升至函数顶部,这就会造成一些难以预料的问题。

首先我们来看看变量提升是什么样的情况?看看下面一段代码。

变量提升

上面这段代码返回的结果是undefined,并不是'Hello Shenzhen',这是因为变量v会在函数内部被提升至函数顶部,实际执行的其实是下面这段代码。

实际执行

为了降低变量提升所带来的编码风险,我们应该手动声明定义的变量和方法,并把其放在函数顶部。

我们不推荐以下写法。

不推荐写法

我们推荐以下写法。

推荐写法

比较判断

在编写判断相等类型的条件语句时,总是使用严格相等(===),这样可以避免Javascript在执行类型转换时带来的问题。

我们看下面一个例子,定义一个函数,传入一个数字,如果等于5,则将这个数加5返回。如果不使用严格等于,在传入一个字符串'5'后,会返回'55'。

没有使用严格相等

因此,我们推荐在使用相等判断时都采用严格相等(===)。

分号

强烈建议在所有结束语句后面加上分号,如果不加上分号会引起一些很难发现的问题。我们看看下面一段代码。

代码

在上面这段代码执行后,我们发现即使resultOperation()函数返回-1,与-1相等,后面的method方法仍然被调用。

这是因为在上面定义的数组末尾没有加上分号,这个数组会与下面一行的-1当做表达式执行,任何非空数组-1都会返回NaN,NaN与resultOperation的返回结果-1不相等,因此后面的method方法会被执行。

省略分号不写,不只是会出现上述的问题,还有很多,这里不一一列举。

因此,建议在每个结尾的语句后加上分号,养成一个好的习惯。

闭包

闭包作为前端面试题中必不可少的知识点是应该要掌握的,而且在前端开发中经常会涉及到,关于闭包的问题,在我写的一篇文章《前端面试中不可逃避的闭包问题,你真的了解吗?》中有详细介绍,大家可以好好看下。

结束语

今天这篇文章详细的介绍了在前端开发过程中涉及到的Javascript规范问题,可能还不够全面,大家可以自行补充。

标签: #js变量污染