js高级

var 是定义,没有的话仅仅是赋值,不要狭隘的认为就是全局
以window.xxx引用全局变量,寻找不到,作为某个属性不存在,返回undefined
直接返回xxx 则报错,d is not defined
js代码自上而下执行,但是在整体运行前分为词法分析(预解析)和运行期
词法分析,分析3样东西:参数;变量声明;函数声明;一个函数能使用的局部变量
,就从上面的3步分析而来
      具体步骤:
0.函数运行前的一瞬间,生成Active Object(活动对象),下称AO
1.函数声明的参数,形成AO 的属性,值全为undefined,立即接受实进行 参覆盖
2.分析变量声明!如 var age,
  如果AO 上还没有age属性,则添加AO属性,值是undefined,
  如果已有,则不受影响
3,分析函数声明,如function foo(){},则把函数赋给AO.foo属性。注:如果此前foo
属性已存在,则被无情的覆盖了
   接着开始执行。。。。
函数声明 与函数表达式 function t1(){}  t2=function(){}
js 被称为披着c外衣的lisp 语言,lisp语言是一种强大的函数式语言(面向对象,
面向过程,面向函数,面向集合)这两种方式,效果是不同的:
  t1是函数声明,虽然全局内也得到一个t1变量,值是function,是个表达式,有返
回结果
  而t2只是一个赋值过程,值是右侧表达式返回的结果
 因此这两种方式在词法分析时有着本质的区别:前者在词法分析过程就发挥作用,
后者在运行阶段才发挥作用
(function(window,undefined){})内层表达式,返回值是函数,包在小括号内,当
做表达式来执行;后面再跟小括号代表立即执行
传window是为了加快内部查找局部变量的速度,window直接在jquery内部的AO上
不传undefined是为了安全,因为在IE,fixfox低版本中,undefined可以重新赋值,
如undefined = 3,声明undefined局部变量(名字是undefined而已),同时又不传参
,值自然就是undefined,防止了外界对该变量的污染
作用域链就是指函数由内向外执行的AO链(分析的时候是由外向内,执行相反)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值