这里我直接贴出代码,注释已经补全,欢迎指正:
<script type="text/javascript"> /** 1,js中一切皆是对象,函数也是, 2,当定义变量不用var修饰的时候,该变量会被默认为全局变量(即window的属性) 3,js的作用链:js调用一个变量的时候,首先会在作用域链中的第一个对象中查找,如果没有,继续向外查找(最外层作用域链对象为window,所以js中不用"var"修饰的变量都作为window的属性,即为全局变量),直到找到 */ var rain = 1; function rainman(){ var man = 2; function inner(){ var innerVar = 4; alert(rain); } inner(); //调用inner函数 } rainman(); //调用rainman函数 ex:以上代码涉及到的作用域链对象有inner,rainman,window var name=1; var func=function(){ alert(name); //输出undefined -作用域:在js中是没有块级作用域的,这里的name基于作用域链,所以在func中查找到了name的定义,但是在alert(name)调用的时候"name"还没有被初始化,所以输出undefined var name=2; alert(name); //输出2 } var func1=function(){ //当函数被调用的时候,js引擎会自动创建一个活动的对象,函数中定义的变量和子函数,都会成为该活动对象(函数对象)的同名属性 var funcObj=this; funcObj.myName=function(){ console.log(funcObj); } } //对于func1的调用 var initFn=function(){ var f=new func1(); f.myName(); } alert(typeof eve); //输出undefined alert(typeof walle); //输出"function" function eve(){} //函数表达式,由js引擎预编译 var walle=function(){} //函数定义式,运行中执行 initFn(); </script>