首页 技术 正文
技术 2022年11月8日
0 收藏 335 点赞 1,530 浏览 1061 个字

一.JS变量提升

1.当浏览器引擎解析js代码时,将js中的所有一开始就是var声明的和function声明的都提升到全局。此时又叫全局作用域

   console.log(aa);
console.log(ff);
console.log(bb); var aa = "aa"; function ff(){
console.log("ff");
}

JS变量提升和作用域

注意:undefined和is not defined是不一样的。

  • undefined:声明了该变量但是调用时没有定义值

  • is not defined:没有声明也没有定义值

2.对于函数也一样,又叫做局部作用域

   function ff(){     console.log(aa);
console.log(fun);
console.log(bb);
var aa = "aa";
function fun(){} } ff();

JS变量提升和作用域

3.作用域分类

  • 全局作用域

  • 函数作用域

  • 块作用域(ES6才有)

注:查找作用域先从当前作用域查找再找上层作用域

例1:

   var x = 10;
function fn() {
console.log(x);
}
function show(f) {
var x = 20;
f();
}
show(fn); //10

分析:

  • 全局作用域

    • var x
    • function fn
    • function show
  • 函数作用域fn
  • 函数作用域show
    • var x

注意此处两个函数作用域是同一级的

执行到console.log(x)时,会先看fn()的函数作用域内是否有x变量没有就出去看全局的(由于show和fn为同一级所以不会看show),则此时x = 10;

例2:

   var fn = function () {
console.log(fn)
}
fn() var obj = {
fn2: function () {
console.log(fn2)
}
}
obj.fn2()

JS变量提升和作用域

分析:

  • 全局作用域:

    • var fn
    • var obj
  • 全局中无函数作用域

第一个fn():会执行console.log(fn)在函数中没有fn,找全局发现fn变量是一个函数则返回函数

第二个obj.fn2():会执行console.log(fn2)在函数中没有发现fn2,不回去找obj对象中的fn2由于没有对象作用域这个东西,则找全局也没有找到报错了。

如果稍微修改以下将fn2改为this.fn2则不会报错,绑定调用对象obj然后调用obj的fn2。

   var fn = function () {
console.log(fn)
}
fn() var obj = {
fn2: function () {
console.log(this.fn2)
}
}
obj.fn2()

JS变量提升和作用域

4.上下文栈

由于和其他语言的压栈方式相同则不在赘述

上一篇: nginx部署项目
下一篇: fork,vfork
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,942
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,468
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,281
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,096
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,728
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,765