温故而知新之- Javascript作用域

举报
余人杰 发表于 2020/09/25 17:45:32 2020/09/25
【摘要】 回顾一下一个小知识点:作用域。

作用域分:全局作用域、局部作用域。


需注意,只有一个全局作用域,局部作用域就不同,每定义一个函数,就有一个局部作用域。


作用域有几个特点:

  1. 变量会在编译器运行时,被定义在所在作用域上。

  2. 变量会从当前所在作用域开始向上逐级查找。


举例解释:

let name = '余人杰';

function a() {
  let id = 'hw91364016';

  function b() {
      let age = 18;
      console.log(id);
      console.log(name);
  }
  b();
}
a();

上面的示例代码对应下面的图:



函数每次被调用,都会创建一个新的作用域。但如果子函数被使用时,父级作用域将被保留,如何理解?

function hw() {
  let num1 = 1;
  return function() {
    let num2 = 1;
    return function() {
      console.log(++num1);
      console.log(++num2);
    };
  };
}
let result = hw()();
result(); //2,2
result(); //3,3 //num1,num2在函数调用后还被保留,因此可以实现累加效果。


在以后的编程上,我们会经常把这个知识点用于构造函数上。当子函数被外部的作用域使用时,父级环境将被保留。

看下面的构造函数例子:

function Cart() {
  let price = 100000;
  this.show = function() {
    console.log(price++);
  };
}
let bmw = new Cart();
bmw.show(); // 100001
bmw.show(); // 100002
let byd = new User();
byd.show(); // 100001


心得:掌握这个小知识点,可以在日后的编程上,大大增高工作效率,加油。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。