码迷,mamicode.com
首页 > Web开发 > 详细

js作用域

时间:2015-01-20 21:57:19      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

先看下面2个例子

<script>
fn();
 var fn =function (){
    alert("fn called");
}
</script>

上面代码报错

求阶层一把使用

<script>
function fn(n){
    if(n<=1) return 1;
    return n*arguments.callee(n-1);
}
</script>

在EMCAscript第五版的静态模式中,callee被禁用

作用域
1.全局作用域
2.函数作用域
1.1.全局作用域 是函数之外(最外层代码)的作用域. 在函数之外进行声明的名称属于全局作用域,这里的名称就是所谓的
全局变量及全局函数
在函数内进行声明的名称拥有的函数作用域,又称局部作用域,作为函数形参的参数变量也属于局部函数作用域。
在javascript中函数作用域与进行声明的行数没有关系

 

<script>
    var x=1;
    function f(){
    p("x="+x);//x=undefined
    var x=2;
    p("x="+x);//x=2
    }
    f();
    </script>

 

局部变量的作用域是整个函数f内部,由于此时还没有对其赋值,所以最开始读取的是undefined
其与下面代码等价

<script>
    function f(){
        var x;
        p("x="+x);
        x=2;
        p("x="+x);
    }
    </script>

所以建议在函数的开始处对所有的局部变量进行声明

<script>
    var x=1;
    function f(){
        p("x="+x);//x=1
    }
    f();
    </script>

块级作用域
js中不存在块级作用域

<script>
    var x=1;
    {
        var x=2;
        p("x="+x);  //2
    }
    p("x="+x);//2
//for语句中对循环变量进行声明是一种习惯做法
    </script>
let与块级作用域
    js随无块级作用域,let可实现同等效果
    一.let定义(let声明)
    二.let语句
    三.let表达式
    1.let定义
        let var1[=value1] [,var2 [=value2] .........;

 

js作用域

标签:

原文地址:http://www.cnblogs.com/HKUI/p/4237219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!