美文网首页
JS预解析&作用域

JS预解析&作用域

作者: 苏码码 | 来源:发表于2021-04-01 11:15 被阅读0次

一、预解析过程
预解析:在js文件或者script里面的代码在正式执行开始之前,进行的一些解析工作,就是在全局中寻找var关键字声明的变量和通过function关键字声明的函数

“变量声明提升,函数整体提升”

console.log(a) => undefined
var a = 10;

之所以是undefined是因为变量声明提前了,等同于下方
var a;
console.log(a);
a = 10;

下面例子预解析过程
var test = 10;
function test() {
};
解析过程如下
var test;
function test() {};
test = 10;

测试
console.log(d) //=> d() {console.log(123);}
var d = 11;
console.log(d) //=> 11
function d() {
console.log(123);
}

解析过程
var d;
function d() {
console.log(123);
}
console.log(d)
d = 11;
console.log(d)

二、作用域:
全局作用域和函数作用域
var m = 10; // 全局作用域
function test() {
var n = 100; // 函数作用域
console.log(m) => 10
}

var x = 1;
function f1() {
var y = 2;
function f2() {
var z = y; // z = 2
y = x; // y = 1
x = z; // x = 2
console.log(x,y,z); => 2 1 2
}
f2();
}
f1();

作用域分解
第一种:
var a1 = 1;
function f1() {
console.log(a1)
};
f1();
结果: 1

第二种:
function f2() {
var a2 = 2;
}
f2();
console.log(a2);
结果: a2 is not defined

第三种:
var a3 = 3;
function f3() {
console.log(a3);
a3 = 31;
}
f3();
console.log(a3);
结果: 3 、31

第四种:
var a4 = 4;
function f4() {
console.log(a4);
var a4 = 41;
}
f4();
console.log(a4);
结果:undefined 、 4

面试题:
var a = 10;
function f5() {
var b = 2 * a; // => 2 * undefined => NaN
var a = 20;
var c = a + 1;
console.log(b);
console.log(c);
};
f5();
结果 :NaN 21
// 当全局变量和局部变量不同名时,全局变量的作用域是整个程序
// 当全局变量和局部变量同名时,全局变量的作用域不包含局部变量的作用域

相关文章

  • JS基础:作用域

    一、作用域概念-预解析规则、表达式 作用域: 域:空间,范围,区域……作用:读,写 浏览器——JS解析器: 在浏览...

  • JS作用域

    一、js作用域概念---预解析规则,表达式 域:指的是一个空间、范围、区域 作用:通常指读和写 所以 作用域:指的...

  • js小知识点(预解析 引用 异常 严格模式)

    预解析:会预先解析一些(变量定义、函数会预解析);var a=12;只把var a提到作用域的顶部js会把变量的声...

  • JS高级-闭包、沙箱

    作用域,作用域链,预解析 变量:局部变量、全局变量 作用域:变量的使用范围 js中没有块级作用域,一对括号中定义的...

  • JS预解析&作用域

    一、预解析过程预解析:在js文件或者script里面的代码在正式执行开始之前,进行的一些解析工作,就是在全局中寻找...

  • JavaScript(1)预解析

    预解析只会发生在通过var定义的变量和function上。 一、原理 1. 定义:预解析:在当前作用域下,js运行...

  • 匿名函数 闭包 JavaScript线程

    预解析 所谓预解析,就是在当前作用域之下,在js代码运行之前,会把带有var和function关键字的事先声明,但...

  • 浅说预解析

    全局作用域:当浏览器加载html页面的时候,首先会提供一个全局Js代码执行的环境. 预解析:在当前作用域中,js代...

  • JavaScript进阶教程-1.作用域深入和面向对象

    第一章 作用域深入和面向对象 预解释 当浏览器开始解析js代码的时候,首先看当前运行环境(作用域)内带var和fu...

  • 原型链

    原型链 this指向 作用域和预解析 new关键字 闭包 继承 JS 规定,所有对象都有自己的原型对象(proto...

网友评论

      本文标题:JS预解析&作用域

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