es63块级作用域

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一种场景</title>
<script type="text/javascript">
-----------------------------------------------------------------
    var a = 1;
    function fn1(){
        alert(a);   //1
    }
    fn1();  

    var a = 1;
    function fn1(){
        alert(a);   //undefined
        if (false) {
            var a = 3;
        };
    }
    fn1();
-------------------------------------------------------------------
    var a = 1;
    function fn1(){
        alert(a);   //undefined
        if (false) {
//函数执行的时候,即使这部分代码没有执行,会创建局部的var time=未定义,所以未定义,函数体中没有通过var声明的变量,会加入到全局window作用域中
            var a = 2;
            function fun() {//函数要执行才加入局部作用域
                console.log("I am inside!");
            };
        };
        fun();//fun is not a function,变为true就是I am inside!
    }
    fn1();
-------------------------------------------------------------------

    var a = 1;
    function fn1(){
        alert(a);   //undefined
        if (true) {
            var a = 2;
            function fun() {//函数要执行才加入局部作用域
                console.log("I am inside!");
            };
        };
        fun();//I am inside!
    }
    fn1();
</script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一种场景</title>
<script type="text/javascript">
    var string = "Hello World!";

    for (var i = 0; i < string.length; i++) {
        console.log(string[i]);//H e l l o W o r l d !
    };

    console.log("循环结束");
    console.log(i);    //12
</script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>块级作用域</title>
<script src="../../../vendor/traceur.js"></script>
<script src="../../../vendor/bootstrap.js"></script>
<script type="text/javascript">
    console.log("ES5:");

    function fun() {
        var num = 100;
        if (true) {
            var num = 200;
        };
        console.log(num);
    };

    fun();    //200
</script>
<script type="text/traceur">
    console.log("ES6:");

    function fun() {
        let num = 100;
        if (true) {
            let num = 200;
            console.log(num);//200
        };
        console.log(num);//100
    };

    fun();    //100
</script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>立即执行函数</title>
<script src="../../../vendor/traceur.js"></script>
<script src="../../../vendor/bootstrap.js"></script>
<script type="text/javascript">
    console.log("ES5:");
    function fun() {
        console.log("I am outside!");
    };

    (function () {
        function fun() {
            console.log("I am inside!");
        };
        fun();//I am inside!
    }());
    fun();//I am outside!

    (function () {
        if (false) {//函数不加入局部作用域
            function fun() {
                console.log("I am inside!");
            };
        };
        fun();// fun is not a function
    }());
    fun();//I am outside!

    (function () {
        if (true) {//加入局部作用域
            function fun() {
                console.log("I am inside!");
            };
        };
        fun();// I am inside!
    }());
    fun();//I am outside!
</script>
<script type="text/traceur">
    console.log("ES6:");
    function fun() {
        console.log("I am outside!");
    };

    (function () {
        if (false) {
            function fun() {//只在大括号范围内有效。es6块级作用域
                console.log("I am inside!");
            };
        };

        fun();//I am outside!
    }());
    fun();//I am outside!
</script>
</head>
<body>

</body>
</html>
时间: 2024-07-31 20:05:04

es63块级作用域的相关文章

ES6之块级作用域

一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一术语--“变量提升(hoisting)”. 如下: function func(){ console.log(test); var test = 1; }; func(); 在node环境执行上述代码,结果为: 之所以为’undefined’,原因就在于‘变量提升’,在进入func函数时,将所有通过

模仿块级作用域

在JavaScript中没有块级作用域的概念.这就意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的. <script> for(var i=0;i<5;i++) { } alert(i); </script> 就上面这个例子中,可以弹出i是5,因为for语句事实上是包含在window.onload= function(){}这个函数中,alert也在这个函数中. 而在java.c++中i只会在for循环的语句块中定义,循环一但结束,变量i就会被销毁.而在Jav

垃圾收集、块级作用域

javascript是一门具有自动垃圾收集机制的编程语言,开发人员不必前内存分配的回收的问题. 离开作用域的值将被自动标记为可以回收,因此将来在垃圾收集期间被删除.标记清除是目前主流的垃圾回收算法,这种算法思想是给当前的值加上标记,然后回收其内存. javascript里没有块级作用域的概念,和c,java等高级语言不同所以在使用if,for格外小心 for(var i=0;i<3;i++) { alert(i); } alert(i);//打印出4

关于JavaScript中没有块级作用域的理解

引用<JavaScript权威指南>(第六版)中的举例 代码段1: var scope="global"; function f(){ console.log(scope); scope="local" console.log(scope); } f(); 会输出什么? 答案:undefined  global 代码段2: var scope="global"; function f(){ var scope; console.log

关于Javascript没有块级作用域和变量声明提升

Javascript是没有块级作用域的,在语句块中声明的变量将成为语句块所在代码片段的局部变量.例如: 1 if(true){ 2 var x=3; 3 } 4 console.log(x); 结果输出3. 再如: 1 var x=5; 2 3 function a(){ 4 if(!x){ 5 var x=10; 6 } 7 console.log(x); 8 } 9 a(); 结果是10.因为变量声明的提升,原理是这样的,举个例子: 1 if(a==undefined){ 2 alert("

匿名函数模仿块级作用域

问题 [无块级作用域]JavaScript中没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的. function outputNumbers(count){ for(var i = 0; i < count; i++){ alert(i); } console.log(i); } outputNumbers(2);//弹出0,1输出2 //变量i是定义在outputNumbers()的活动对象中的,因此从它有定义开始,就可以在函数内部随时访问它. 函数中的

block、块级作用域

block:语句块 (或其他语言中的 复合语句) 用来组织零个或多条语句. 包含在{ }里面 通常在流程控制语句 (如 if, for, while)中使用 块级作用域:通过var声明的变量没有块级作用域. 在语句块(block)里声明的变量作用域是其所在的函数或者 script 标签内, 你可以在语句块外面访问到它. 换句话说, 语句块不会生成一个新的作用域. 尽管单独的语句块是合法的语句, 但在JavaScript中你不会想使用单独的语句块,因为它们不像你想象的C或Java中的语句块那样处理

JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域

JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行) JS的作用:表单验证,减轻服务端的压力 添加页面动画效果  动态更改页面内容  Ajax网络请求 (一)常见的对话框 alert()对话框:该方法是window对象的方法,在浏览器中弹出一个对话框(该方法没有返回值)  prompt()对话框:2个参数,一个是浏览器提示信息,第二个是默认的输入框的值,返回值就是输入框的信息  confirm()对话框:在浏览器弹出一个对话框,用户只能选择正确或者取消,返回值对应为

js没有块级作用域

今天看一篇介绍ECMAscript6的博文时,看到let命令的时候突然有点蒙逼....... let命令:let用于变量声明,与var用法类似,但是let是一个局部变量,只在声明的代码块中有效. { let a = 10; var b = 20; } a // not defined b // 20 看到这我觉得这个块级作用域是函数作用域,但是块级作用域和函数作用域是不一样的,比如: function demo(){ var a=1; } console.log(a); a//not defin