美文网首页编程go之Javascript
Javascript 基础之作用域

Javascript 基础之作用域

作者: 编程go | 来源:发表于2017-03-07 00:07 被阅读60次

1 函数作用域

demo1,

var scope = "action 1"
function scopeTest() {
    console.log(scope)    // action 1
    scope = "action 2"
    console.log(scope)     // action 2
}

scopeTest()

demo2,

var scope = "action 1"
function scopeTest() {
    console.log(scope)    // undefined
    var scope = "action 2"
    console.log(scope)    // action 2
}

scopeTest()

仔细观擦demo1 与 demo2 仅仅一点区别,然而执行后的结果却是截然不同, 究其原因主要是因为Javascript 是函数作用域而不是块级作用域,函数作用域内命名的变量在函数内部起作用。

2 作用域链

scope = "action 1"
function scopeDemo (){  
    var name="action 2" 
    function scopeTest1 (){  
        var name="action 3"
        console.log(name)
    }  
    function scopeTest2 (){  
        console.log(name) 
    }  
   
    scopeTest1 ()  // action 3
    scopeTest2 ()  // action 2
}  
scopeDemo ()

在执行scopeTest1 时作用域链是 scopeTest1 -> scopeDemo() -> window
在执行scopeTest2 时作用域链是 scopeTest2 -> scopeDemo() -> window

3 作用域链与代码优化

从作用域链的结构可以看出,在运行期上下文的作用域链中,标识符所在的位置越深,读写速度就会越慢。

function changeColor(){
    document.getElementById("btnChange").onclick=function(){
        document.getElementById("targetCanvas").style.backgroundColor="red";
    };
}

优化后:

function changeColor(){
    var doc=document;
    doc.getElementById("btnChange").onclick=function(){
        doc.getElementById("targetCanvas").style.backgroundColor="red";
    };
}

4 如何在Javascript 函数中实现块级作用域

在一个函数中定义的变量,当这个函数调用完后,变量会被销毁,我们可以用这个特性来模拟出JS的块级作用域。Javascript的闭包特性可以实现防止命名冲突。

function test(){ 
  (function (){ 
    for(var i=0;i<4;i++){ 
    } 
  })(); 
  alert(i); 
} 
test();

相关文章

  • JS基础---05作用域

    JavaScript基础 1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作...

  • JavaScript深入系列的学习(一)

    JavaScript深入之从原型到原型链JavaScript深入之词法作用域和动态作用域JavaScript深入之...

  • 执行上下文、作用域链、this、闭包

    javascript 执行的是词法作用域,即静态作用域。与之相对的是动态作用域。 静态作用域:函数的作用域在函数定...

  • 作用域链,闭包,原型链

    Javascript-基础概念总结 【作用域】javascript中的作用域可以理解为一个语句执行的环境大小,有全...

  • 技术栈

    一、HTML、CSS基础、JavaScript语法基础。 二、JavaScript语法进阶。包括:作用域和闭包、t...

  • 2020前端技术栈

    一、HTML、CSS基础、JavaScript语法基础。二、JavaScript语法进阶。包括:作用域和闭包、th...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • JavaScript基础 作用域

    作用域:脚本的有效范围;分为2类:全局和局部只有函数才有局部,其他的没有 for if 全局:1、在scrip...

  • 07-JavaScript作用域和预解析

    JavaScript作用域 JavaScript中有全局作用域和局部作用域 相同作用域内不能有同名的变量和函数 不...

  • JavaScript 作用域和作用域链

    JavaScript 作用域 作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域...

网友评论

    本文标题:Javascript 基础之作用域

    本文链接:https://www.haomeiwen.com/subject/opxpgttx.html