zoukankan      html  css  js  c++  java
  • 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具有块级作用域,也就是说在块级声明中创建并使用时,是具有全局作用域的

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

  • 相关阅读:
    常见英语单词后缀
    vim手册
    笔记《鸟哥的Linux私房菜》9 档案与文件系统的压缩与打包
    笔记《鸟哥的Linux私房菜》8 Linux 磁盘与文件系统管理
    Centos 搭建 NFS
    Python Unicode编码方式
    Centos 安装 OpenCV
    Centos 安装 Python Image PIL
    Linux 文件打乱顺序
    CentOS 安装ffmpeg
  • 原文地址:https://www.cnblogs.com/qf-dd/p/10414313.html
Copyright © 2011-2022 走看看