美文网首页
JavaScript 函数作用域

JavaScript 函数作用域

作者: 勇者闯魔城 | 来源:发表于2018-10-22 23:39 被阅读0次

一.作用域

作用域指的是变量存在的范围。ES5 有2种。一是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;二是函数作用域,变量只在函数内部存在。

全局变量:函数外部声明的变量就是,它可以在函数内部读取。
局部变量:在函数内部定义的变量,外部无法读取。
注意:函数内部定义的变量,会在该作用域内覆盖同名全局变量。

二.执行函数过程中,内部变量的查找顺序。

函数在执行的过程中,先从自己内部找变量。如果找不到,再从创建当前函数所在的作用域去找, 以此往上。(注:函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域)

var a = 1
function fn1(){
  function fn2(){
    console.log(a)
  }
  function fn3(){
    var a = 4
    fn2()
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn()

// 2 调用fn1,调用fn3,调用fn2console.log(a),fn2内没有变量a,便查找fn2声明所在的作用域fn1找到var a =2

三.函数作用域与变量提升

与全局作用域一样,函数作用域内部也会产生“变量提升”现象。var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部

var a = 1
function fn1(){

  function fn3(){
    function fn2(){
      console.log(a)
    }
    fn2()
    var a = 4
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() 

// undefined 注意:因为函数fn2调用在var a = 4 之前,所以fn2读取的是变量前置的a的初始值undefined。可以看成以下。

var a = 1
function fn1(){

  function fn3(){
    var a
    function fn2(){
      console.log(a)
    }
    fn2()
    a = 4
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() 

相关文章

  • JavaScript函数作用域和声明提前

    函数作用域 JavaScript 中没有块级作用域,JavaScript 取而代之地使用了函数作用域。变量在声明它...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • js 变量作用域问题 以及 let

    JavaScript中有以下两种作用域 全局作用域函数作用域全局作用域是函数之外(最外层代码)的作用域。在函数之外...

  • 07-JavaScript作用域和预解析

    JavaScript作用域 JavaScript中有全局作用域和局部作用域 相同作用域内不能有同名的变量和函数 不...

  • JavaScript 作用域和作用域链

    JavaScript 作用域 作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域...

  • JavaScript 作用域

    在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 局部作用域 函数内声...

  • JavaScript 作用域

    1.在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作...

  • 作用域、执行环境、作用域链

    作用域,之前有介绍过,JavaScript无块级作用域,只有函数作用域,简单点说就是JavaScript的作用域就...

  • 作用域

    作用域 javascript没有块级作用域 只有函数可以创建的作用域

  • JavaScript作用域分类

    JavaScript作用域分类全局作用域局部作用域函数作用域块级作用域catchwithlet 和 const 什...

网友评论

      本文标题:JavaScript 函数作用域

      本文链接:https://www.haomeiwen.com/subject/pjmnzftx.html