zoukankan      html  css  js  c++  java
  • js 作用域 基础

         1.变量的作用域

    变量的作用域分为两种

    (1),全局作用域:在函数外,使用var声明变量,可以在任何作用域下访问————————————全局变量

    (2),函数作用域:在函数内,使用var声明变量,只能在当前函数中访问---------------------------------------局部变量(在函数作用域中,没有用var声明的变量,是全局变量,不推荐,在严格模式中会报错)

    function fn(){
      var a=b=c=2;
      //c=2   //没有加var
      //b=c   //没有加var
      //var a=b  //加var
    }
    fn();
    //console.log(a);

    在执行代码的时候程序是先考虑c=2 从右往左运算赋值 只需要看看这个变量有没有被声明;

    (3).js程序执行前,会将var的声明的变量提升到当前作用域的最前面,而赋值去不会提升;

    function fn(){
      //var b
      console.log(b);//undefined
      var b=2;
    }
    fn();

    在执行的时候,var b会被提升到当前这个作用域的前面,//var b    

    var c=3;
    function fun(){
      //当前作用域下没有c,会到上一级作用域寻找c
      console.log(c);//3
      c=5;//给全局变量c重新赋值为5
    }
    fun();
    console.log(c);//访问的是全局的c

    console.log(c)//为 5   访问的是全局变量,c=5(是全局变量)因此又重新赋值为5;

    fun()的值为3         他其实访问的局部变量,由于js为解释性弱语言,当前作用域没有c变量,所以他会在上一级作用域寻找c变量。作用域链;

    function add(a,b){
      //形参属于局部变量,不能被外部所访问
    }
    add(2,3);
    //console.log(a);
    */
    形参属于局部变量,不能被外部所访问,
    var m=5;
    function foo(m){
      //调用函数,实参赋值给形参,形参m就相当于局部变量
      //var m=1
      //往上去找m,找到的是当前作用域下的m,而不会去全局寻找
      m=m+7;//在原来的基础之上加1  m+=7
    }
    foo(1);
    //在全局作用域下,访问的就是全局的m
    console.log(m);//5

    实参给形参了一个值,而形参属于局部变量,所以函数体中所有的m都为局部变量,最后console。log访问的是全局变量。

  • 相关阅读:
    leetcode_357. Count Numbers with Unique Digits
    leetcode_712. Minimum ASCII Delete Sum for Two Strings
    leetcode_865. Smallest Subtree with all the Deepest Nodes
    leetcode_919. Complete Binary Tree Inserter
    leetcode_1014. Capacity To Ship Packages Within D Days
    leetcode_998. Maximum Binary Tree II
    leetcode_654. Maximum Binary Tree
    leetcode_894. All Possible Full Binary Trees
    leetcode_486. Predict the Winner
    二叉树的遍历
  • 原文地址:https://www.cnblogs.com/klwblogs/p/13080658.html
Copyright © 2011-2022 走看看