zoukankan      html  css  js  c++  java
  • JS中的变量作用域问题

    JS中的变量是函数作用域,在嵌套作用域中创建的变量可用于整个函数。

    代码伺候:

    如下:

    function f1(){
      var n = 5;
      if(true){
        var n = 10;
      }
      console.log(n); // 10
    }
    f1();
    

     结果输出 10,原因是if语句中的变量 n 覆盖了外层的变量 n ;

    在ES6中,改用let定义变量,

    function f1(){
      let n = 5;
      if(true){
        let n = 10;
      }
      console.log(n); // 5
    }
    f1();
    

     输出结果是所期望的。

    使用var声明变量和使用let声明变量的一个区别就在于,前者是函数作用域,后者是块级作用域额,而且是在块中所出现的位置上初始化。因此对于使用let声明的变量,你无法在声明之前进行访问。而使用var生命的变量,访问顺序并不重要。

    function fooey(){
      console.log(foo);
      let foo = 100;
    }
    fooey();
    

     报错。下面看看使用var定义变量

    function fooey(){
      console.log(foo);
      var foo = 100;
    }
    fooey();
    

     输出undefined

    下面再看一个例子:

    for(var i = 0; i<5; i++){
      console.log('hello'+i);
    }
    console.log(i);
    

     输出如下:

     改用let定义变量:

    for(let i = 0; i<5; i++){
      console.log('hello'+i);
    }
    console.log(i);
    

     输出如下:

     因为i是let创建的,故其作用域被限制在for循环中,该变量在作用域中之外是不可见的。

  • 相关阅读:
    django的用户认证模块(auth)
    算法
    图书管理系统
    mac系统中pycharm激活
    mac常见问题
    mysql安装
    restful规范及DRF基础
    MySQL存储引擎
    [python] with statement
    MySQL索引及执行计划
  • 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12172131.html
Copyright © 2011-2022 走看看