• 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循环中,该变量在作用域中之外是不可见的。

  • 相关阅读:
    【一起来烧脑】读懂HTTP知识体系
    Day16:小前端
    Day15:大前端
    Day14:CSS垂直居中
    Day13:H5+JS+C3
    web学习
    javascript 闭包
    微信小程序微信登录
    微信小程序开源
    mpvue搭建小程序框架
  • 原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12172131.html
Copyright © 2020-2023  润新知