首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JavaScript 函数作用域

JavaScript 函数作用域

作者头像
RiemannHypothesis
发布于 2022-10-28 14:50:10
发布于 2022-10-28 14:50:10
7800
举报
文章被收录于专栏:ElixirElixir

函数作用域

定义

作用域(scope)指的是变量存在的范围。在 ES5 的规范中,Javascript 只有两种作用域:一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;另一种是函数作用域,变量只在函数内部存在。ES6 又新增了块级作用域,本教程不涉及。

函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。

代码语言:javascript
复制
var v = 1;

function f() {
  console.log(v);
}

f()
// 1

在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。

代码语言:javascript
复制
function f(){
  var v = 1;
}

v // ReferenceError: v is not defined

函数内部定义的变量,会在该作用域内覆盖同名全局变量。

代码语言:javascript
复制
var v = 1;

function f(){
  var v = 2;
  console.log(v);
}

f() // 2
v // 1

注意,对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。

代码语言:javascript
复制
if (true) {
  var x = 5;
}
console.log(x);  // 5

函数内部的变量提升

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

代码语言:javascript
复制
function foo(x) {
  if (x > 100) {
    var tmp = x - 100;
  }
}

函数本身的作用域

函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。

代码语言:javascript
复制
var a = 1;
var x = function () {
  console.log(a);
};

function f() {
  var a = 2;
  x();
}

f() // 1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 函数作用域
    • 定义
    • 函数内部的变量提升
    • 函数本身的作用域
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档