美文网首页js笔记
js笔记之作用域

js笔记之作用域

作者: uplyw | 来源:发表于2018-04-27 21:54 被阅读9次
1. 如何区分全局作用域和私有作用域?
  1. 在全局作用域下声明(预解释的时候)的变量是全局变量
  2. 在私有作用域中声明的变量和函数的形参都是私有变量:
    在私有作用域中,我们代码执行的时候遇到一个变量,首先我们需要确定他是否为私有变量,如果是私有的变量,那么和外面的没有任何关系;如果不是私有的,则往当前作用域的上级作用域进行查找,如果上级作用域也没有则继续查找,一直找到window为止...(作用域链);
2. 当函数执行的时候(直接目的: 让函数体中的代码执行),首先会形成一个私有作用域,然后按照如下步骤执行:
  1. 如果有形参,先给形参赋值
  2. 进行私有作用域中的预解释
  3. 私有作用域中的代码从上到下执行
  4. ...
函数形成了一个私有作用域保护了里面的私有变量不受外界干扰(外面修改不了私有的,私有的也修改不了外面的) -> 闭包
console.log(total);
var total = 0;
function fn(num1,num2){
    console.log(total);
    var total = num1 + num2;
    console.log(total);
}
fn(100,200)
console.log(total)

// 输出的结果依次是:
// undefined
// undefined
// 300
// 0
console.log(total);
var total = 0;
function fn(num1,num2){
    console.log(total);
    total = num1 + num2;
    console.log(total);
}
fn(100,200)
console.log(total)

// 输出的结果依次是:
// undefined
// 0
// 300
// 300
在全局作用域中,带var和不带var的关系?

区别: 带var的可以预解释,所以在赋值的前面可以执行不会报错; 不带var的是不能进行预解释的,在前面执行会报错

关系: num1 = 1 -> 相当于给window增加了一个叫num1 的属性名,属性值为 1
var num = 1 -> 首先它相当于给全局作用域增加了一个全局变量num;但是不仅如此,他也相当于给window增加一个属性名为num,属性值为1

console.log(num) // undefined
var num = 1;
console.log(num) // 1

console.log(num1) // Uncaught ReferenceError: num1 is not defined(报错:num1未定义)
num1 = 1;
console.log(num1) // 1

私有作用域中出现的一个变量不是私有的,则往上一级作用域进行查找,上级没有则继续向上查找,一直找到window位置,如果找不到呢?

  1. 我们是要获取值:console.log(total) -> 报错了!
function fn(){
    console.log(total); // Uncaught ReferenceError: total is not defined(报错:total未定义)
    total = 100;
}
fn()
console.log(total) // 报错后,后面的代码不执行
  1. 我们要是设置值:total = 100;相当于给window增加一个属性名total,属性值100
function fn(){
    total = 100;
}
fn()
console.log(total) // 100

js中如果在不进行任何特殊处理的情况下,上面的代码报错,下面的代码都不在执行了

相关文章

  • JavaScript作用域学习笔记

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

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • 2019-08-13JS里面的作用域Scope

    作用域指一个变量的作用范围。 JS的作用域 在JS中,有两种作用域 全局作用域直接编写在script标签中 JS代...

  • 干货!月薪80k前端大佬面试笔记:JS闭包解析!

    三点注意事项 JS没有块级作用域,只有全局作用域和局部作用域(函数作用域)。 JS中的作用域链,内部的作用域可以访...

  • JavaScript作用域的理解

    作用域:就是起作用的区域。JS的作用域规定了变量和函数可访问的范围。JS作用域分为:全局作用域和局部作用域 全局作...

  • JS 作用域链、导入导出

    1. JS 的作用域链 作用域在 JS 中表示变量的可访问性和可见性。JS 作用域有 3 种:1. 全局作用域;2...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

网友评论

    本文标题:js笔记之作用域

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