JS作用域
2016-11-21 本文已影响0人
W凯
JS模块化
JS中变量声明问题
JS为弱类型,编译型语言
声明提前
在JS中,声明语句会被提前到文件首
//运行结果为2
a=2;
console.log(a);
//var a=3;被分成两部分,var a; a=3;其中var a;会被提到文件首
var a=3;
//函数声明
function f(){}
//var f1为声明,f1=function(){}为赋值
//function f(){}不是声明函数,是函数表达式类型
var f1=function(){};
//变量声明会提前,但是执行时会报错,TypeError:f is not a function ...
f();
var f=function(){
alert("ok");
}
静态类型为强类型,动态类型为引用类型
作用域
顶级作用域—全局变量
JS中属性名可以被覆盖。
//window.a为全局变量
var a=3;
console.log(window.a);
在一个作用域以内,使用变量时,如果本作用域以内没有时,向上查找,直到到顶层变量,如果顶层没有时,就在顶层声明一个变量。
注意在任何情况下使用变量时,使用var声明。
//自执行函数
(function(){
var a=3;
function f(){
//绑定事件可写
}
})();
//初始化全局变量,绑定事件
闭包
闭包特性:定义时作用域。
var a=5;
(function(){
var a=4;
function f(){
console.log(a);
}
window.createf=function(){
return f;
};
})();
var f= createf();
f();