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();
上一篇下一篇

猜你喜欢

热点阅读