js 的作用域

 js的作用域

一. 方式
1.常用方式: function test (参数) { ………….方法的实现……………….. }
这种方式的函数声明的先后位置与调用无关,可以在调用的前面声明,也可以
在调用的后面声明;
2.匿名函数: 把方法赋给一个变量,此时这个变量是一种方法类的变量;
Var a = function (参数) {………..方法的实现……………………}
这种方式的函数声明必须放在调用的前面;
匿名函数直接调用的方式,例如: alert(function () {}


二. 参数的管理:
每一个函数在声明时,软件系统就会隐形的给函数创建一个arguments的对象,用来管理该函数的参数(数据), arguments.length 代表的是函数的参数个数. 
在调用时,给函数传入实参,这时,传入几个实参,arguments.length就为几.
Arguments就相当于一个数组来管理函数的参数,arguments[0]=第一个参数的值,
Arguments[1]=第二个参数的值,,,,,依次类推.

三. 全局变量的定义方式:
在最外层定义变量: 例: <script> {var a; ……} </script>
在局部定义全局变量: 例: function test () { a = 1; } ,就是不加 “ var ”.
( 作用域 ) 局部可以访问外部的变量, 外部不能访问局部的变量.

四. 代码加载顺序
1. 首先解析预编译: <script> { } </script>
2. 解析作用域(也是运行环境) : 全局变量,局部变量
读取var a , function() { 代码内容 };当解析到function时,直接加载里面的代码.
3.当把作用域解析完后, 这时,开始从script 起始位置从上到下,依次运行(该给全局变量赋值的就赋值,该调用的调用);这时一个script块就完全的执行完了(加载完了).
4.若下面还有script 块,下面的这个script块在按照上面的三个步骤来解析这个script里面的代码.

五. 回调函数
Function math (a, b, fun) { 
代码执行
}
调用方式: alert(math(2,3,fun(1,2) ) );
其中: a, b, 都是math函数的参数; fun也是math函数的参数, 只是这个参数是一个方法(函数); 在调用math函数时,分别给math函数, fun函数传入参数, 先执行math函数里除参数为fun的代码,执行完后,再执行fun函数里面的代码.,这样math函数就执行完毕了.
六. 递归函数
例如: 计算5! ( 5的阶乘 )
Function test (sum) {
If(sum == 1){
Return sum;
} else{
Return sum * test( --sum );
}
}
调用: alert( test( 5 ) );



七. 作用域链

Function test () {
Alert ( a );
Var a = 1;
Alert ( a );

Test () ; 
上面的代码执行完后,首先会输出一个undefined , 然后在输出一个” 1 ” ,
解析: 当程序读到test () ; 这一步的时候,这时进入function test 内部, 先解析作用域(找全局 \ function\以及其他内容), 这时并不给全局变量赋值, 
当作用域解析完后, 这时在function的内部从上到下依次该赋值的赋值,该调用的调用,这样有序的执行代码.
所以: 第一步alert 输出的 a 是一个声明了的变量,但是并没给其赋值, 故输出的是undefined; 
第二步alert 输出的 a 是声明了并且也赋值了的变量,故输出的是变量 a 的值.


八. 作用域
Var a = 1;
Function test () {
Alert ( a );

Test () ; 如果function 里面定义了变量 a ,
上面代码执行完后,会输出” 1 ”,这是因为: 当调用函数test时,首先找test里有没有 变量 a, 如果在这个函数里找到了变量a, 那么alert输出的就是test 里面的 a 的值; 如果在test 里没有找到变量 a , 这时,程序会跳出这个函数,找test外面紧挨着的一层父级有没有变量a, 若有则会把这个变量的值传入函数,最后输出来;如果还是没有,则继续再上一层的父级里面找,如果始终没有变量 a, 那么a 就完全无定义了, 就不会输出任何东西.

转载于:https://www.cnblogs.com/Hrbacity/p/4780833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值