稳扎稳打JS——自由变量

自由变量的作用域在程序运行前就已经确定!

  • 自由变量相当于Java中的全局变量,它在外层作用域中声明,但在内层作用域中使用,如下所示:
var a = 1;
function fn(){
    console.log(a);//a为自由变量
}
  • 当自由变量所属的函数被定义时,自由变量的值就已经确定,是该函数定义处的父作用域中同名变量的值。
  • 在上述示例中,函数内部的a是自由变量,它的值是fn的父作用域中a的值,也就是1。
  • 来看下面的示例:输出结果为1
var a = 1;

function fn1(fn){
  var a = 2;
  fn();
}

function fn2(){
  console.log(a);
}

fn1(fn2);

fn2中的自由变量a在其定义时就已经确定,是它定义处的父作用域中的同名变量的值,而fn2定义处的父作用域为全局作用域,全局作用域中a的值为1,因此输出的结果为1。

  • 注意:自由变量的值一定要去函数定义处找!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏十月梦想

each()list()while遍历数组

each()函数:需要一个数组作为参考,each函数返回1,0,key,value键值,0,key返回键,1,value对应的值,

891
来自专栏Android Note

Java 8之lambda表达式(二)

1034
来自专栏noteless

-1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态

面向对象把功能逻辑封装到类本身,用对象去调用功能 持有数据,结构更加自然,也更符合人们的思维习惯

841
来自专栏calmound

Xtu 1150 Assembly Line

http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1150 题意:任意多个ABC三个数,...

2777
来自专栏大闲人柴毛毛

稳扎稳打JavaScript(二)——图解对象内存模型

1. 什么是JS对象? 在JS中,对象是一组无序属性的集合。其中,属性可以是基本数据类型、引用类型、函数。如下面这个对象的例子: var chai={ ...

4216
来自专栏WD学习记录

C#学习笔记(三)

隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

1091
来自专栏C语言及其他语言

【编程经验】表达式和语句及选择结构

在C中,表达式代表值,而语句代表给计算机的指令。 表达式 表达式由运算符和操作数组成。最简单的表达式只是一个不带运算符的常量或者变量,例如12或者num。...

952
来自专栏土豆专栏

Java面试之关键字

finalize()是Object的protected方法,子类可以覆盖该方法来实现资源清理工作,GC在回收对象之前调用该方法。

21010
来自专栏java初学

static关键字

29110
来自专栏尾尾部落

[剑指offer] 把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字...

1482

扫码关注云+社区