• Java技术分享:浅谈JavaScript作用域


    javascript是目前web领域中使用非常广泛的语言,不管是在前端还是在后端都能看到它的影子,可以说web从业者不论怎样都绕不开它。在前端领域,各种框架层出不穷。在后端领域,nodejs可谓如火如荼,打破了人们对javascript只能作为前端语言的认知。按照此势头下去,javascript会越来越流行,会随着web的发展越来越重要。

    所以不论你是想学各种前端框架还是nodejs,都需要深入理解javascript的工作原理以及特性,只有这样才能以不变应万变。

    今天给大家分享的是:浅谈JavaScript作用域

     

    什么是作用域?

    Js中的变量或者函数能够被访问到的代码空间(变量或者函数有效的范围)。

    JavaScript中的作用域

    全局作用域;

    局部作用域;

    当一个变量在函数最外层定义时,变量就在全局作用域中,在一个函数内部定义一个变量,这个变量就在局部变量中。

     

    全局作用域

    最外层函数或者在其外部定义的变量具有全局作用域。

    var a = 10; //全局变量

    function foo(){ //全局函数

    console.log(a);

    }

    这个变量a就在全局作用域中,可以说成是个全局变量,这个a可以子啊认可地方访问或修改。

    还有一点,window对象的属性和方法具有全局作用域

    Eg:

    alert("dddddd");

    window.alert("aaaa");

    var obj = {

    name:"john",

    age:20,

    sayHello:function(x){

    console.log(x);//输出undefined//第二次输出1//第三次输出aaa(要问我为什么会输出三次,因为声明提升的问题,请自行百度)

    }

    };

    console.log(obj.name);//输出jogn

    obj.sayHello();

    console.log(obj.sayHello(1))//输出undefined

    obj.sayHello("aaaaa");

    在一个函数内部声明一个变量不用 var来定义,这个变量具有全局作用域

    function foo(){

    b = 20;

    var a = 10;

    }

    foo();

    console.log(b);

    console.log(a);//a会报错,因为a 是一个局部变量

    局部作用域

    定义在函数中的变量就在局部作用域中。并且函数在每次调用时都有一个不同的作用域。这意味着同名变量可以用在不同的函数中。因为这些变量绑定在不同的函数中,拥有不同作用域,彼此之间不能访问。(在一个函数颞部定义的函数或者用var定义的变量具有局部作用域)

    Eg:

    在ES5中函数去区分全局和局部的唯一的代码块

    if(true){

    var a = 10;

    }

    for(var i =0; i<=0; i++){

    var b = 10;

    }

    console.log(a,b);//a,b都是输出10

    函数的形参具有局部作用域,是局部变量

    function foo(x){

    console.log(x);//输出undefined

    }

    foo();

    console.log(x);//报错

    补充一点块语句

    块级声明包括if和switch,以及for和while循环,和函数不同,它们不会创建新的作用域。在块级声明中定义的变量从属于该块所在的作用域。

    Eg:

    if(true){

    Var name = "join";

    }

    Console.log(name)//输出join

    Es6中引用了let,const关键字,这些关键字可以代替var,但是和var不同的是,let和const具有块级作用域,也就是说在块级声明中创建并使用时,是具有全局作用域的

    在全局作用域声明的变量可以称为全局变量,同理还有全局变量,和函数形参,他们所站的比重是局部变量>函数形参>全局变量。

  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/qf-dd/p/10414313.html
Copyright © 2020-2023  润新知