如何编写高质量的Javascript代码(3)
来源:rockux 发布时间:2011-03-07 16:04:00
忘记var的影响
使用var声明的全局变量和没有使用var生成的全局变量还有一个区别在于删除:
使用var声明创建的全局变量不能被删除
没有使用var声明的全局变量可以被删除
这说明没有使用var声明生成的全局变量不是真正的变量,他们只是全局对象的属性。属性可以通过delete删除,但是变量不行:
// define three globals
var global_var = 1;
global_novar = 2; // antipattern
(function () {
global_fromfunc = 3; // antipattern
}());
// attempt to delete
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
// test the deletion
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
在ES5的严格模式下,给一个为声明的变量赋值会报错。
读取全局对象
在浏览器中,你可以通过window变量来读取全局对象(除非你在函数内部重新定义了window对象)。但在有的环境中,可能不叫window,那么你可以使用下面的代码来获取全局对象:
var global = (function(){
return this;
})();
这样可以获取到全局对象的原因是在function的内部,this指向全局对象。但是这在ES5的严格模式下会不起作用,你需要适配一些其他模式。当你开发自己的库的时候,你可以把你的代码封装在一个立即函数中,然后将this作为一个参数传进来。
单个var模式
在你的代码的顶部只是用一个var关键字,会有以下的好处:
对于所有需要的变量,在一个地方就可以全部看到
避免使用一个未定义的变量
帮助你记忆声明的变量,减少全局变量
更精简的代码
书写很简单:
function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
// function body...
}
通过一个var和逗号来声明多个变量。在声明的时候给变量赋默认值也是不错的做法,可以避免一些逻辑错误,提高代码的可读性。而后你阅读的代码的时候也可以根据变量的默认值来方便的猜测变量的用途。
你也可以在声明变量的时候做一些实际的工作,比如sum = a + b;另外,在操作DOM元素的时候,你也可以把DOM元素的引用保存在一个变量中:
function updateElement() {
var el = document.getElementById("result"),
style = el.style;
// do something with el and style...
}


猜你喜欢
- 在python中,如下代码结果一定不会让你吃惊:Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013
- PHP是一种面向对象的编程语言,它允许开发者使用面向对象的编程技术来构建复杂的应用程序。下面是一些关于PHP面向对象编程的讲解:类与对象类是
- 网上找了半天 不是dataframe转化成array的就是array转化dataframe,所以这里给汇总一下,相互转换的python代如下
- 像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经
- 一些MySQL发布对MySQL数据库中的系统表的结构进行了更改,添加了新权限或特性。当你更新到新版本MySQL,你应同时更新系统表,以确保它
- 最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法:importlib.import_m
- 关于 TensorFlowTensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(N
- 13个机器学习的框架偏向于Python的原因,供大家参考,具体内容如下前言主要有以下原因:1. Python是解释语言,程序写起来非常方便写
- 本文实例为大家分享了JSP学生信息管理系统源码,JSP+Servlet+Javabean+JDBC+MySQL,供大家参考,具体内容如下1.
- 1 PromisePromise有一个缺点是一旦创建无法取消,所以本质上Promise是无法被终止的.但是我们可以通过中断调用链或中断Pro
- MySQL出现乱码的原因要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些
- 以下是个人对Python深浅拷贝的通俗解释,易于绕开复杂的Python数据结构存储来进行理解!高级语言中变量是对内存及其地址的抽象,Pyth
- Request.ServerVariables里Server_Name与Http_Host之间有什么区别呢?如果不仔细看,您应该看不出它们之
- 在网页中经常见到两类不同的按钮。一类表示当前所示的状态,一类表示将要进行的动作。(如下图) 那么,同样是icon类的按钮,为什么有
- 前言单例模式(Singleton Pattern),是一种软件设计模式,是类只能实例化一个对象,目的是便于外界的访问,节约系统资源,如果希望
- 引言对 axios 二次封装,更加的可配置化、扩展性更加强大灵活通过 class 类实现,class 具备更强封装性(封装、继承、多态),通
- 代码实现:<!DOCTYPE html><html lang="en"><head>
- 最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用。因为对Python
- 一、存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用
- 本文实例为大家分享了python openCV自制绘画板的具体代码,供大家参考,具体内容如下import numpy as npimport