1.js中全局变量的风险:别人可以创建相同名称的变量,覆盖掉你正在使用的变量
避免方法:
A.创建一个包含其他所有变量的全局变量
var applicationName={}
当需要创建一个全局变量时,附加到对象上即可:applicationName.myVariable=”abc”
B.另一种方法是将所有代码封装到一个自动执行的函数中,这样所有声明的变量都在函数内
(function(){
var a=”abc”;
})();
2.变量提升:无论变量是在范围内的哪个地方声明的,javascript引擎会将这个声明提升到该范围的顶部
function foo(){
//省略代码
var a=”abc”;
}
实际上会这样执行:
function foo(){
var a;
//省略代码
a=”abc”;
}
3.闭包:闭包允许一个函数定义在另一个外部函数的作用域内,即便作用域内的其他东西消失了,它仍可以访问外部函数的变量;闭包是有权限访问另一个函数作用域的变量的函数
4.js中让全局变量少的重要的使用var来声明变量
function sum(x,y){
result=x+y;//没有声明result变量,result为隐式全局变量
return result;
}
function foo(){
var a=b=0;//a为局部变量,b为全局变量
}
通过var创建的全局变量(任何函数之外的程序中创建的)是不能被删除的;无var创建的隐式全局变量(无论是否在函数中创建)是可以被删除的
技术上,隐式全局变量不是真正的全局变量,但他们是全局对象的属性,属性可以通过delete操作符删除,而变量不能
5.js中()为分组操作符,如eval(‘(‘+data+’)’),就是因为括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块
6.js声明变量:var cnblogs=cnblogs||{},这是确保cnblogs存在的时候直接使用,不存在的时候直接赋值为{}