JavaScript中内存的知识

本文介绍了JavaScript中的内存分配机制,包括栈内存与堆内存的区别,以及如何存储基本数据类型和引用数据类型。同时,还详细讲解了JavaScript的作用域概念,包括全局作用域和函数作用域的特点,并解释了变量声明提升及函数声明提升的现象。

JavaScript于Java的内存分配有些却别,这里暂时先记录JavaScript的内存知识

JavaScript的内存分为栈内存堆内存,基本数据类型保存在栈内存中,引用数据类型(对象)是保存在堆内存中

对象在内存中的存储图示
在这里插入图片描述

var a = new Object();
var b = {}; //对象字面量
本质上是一样的
但是字面量的定义方法可以在申明的同时添加属性
var obj = {name:'wby',age : 18,gender : 'male'};

函数对象的一些知识点

【代码】function myFunction(){ console.log('________'); }


myFunction和**myFunction()**是有区别的,前者是指这个函数对象,后者是调用对象

匿名函数(立即执行函数)

     (function(a,b){
            console.log(a+b);
     })(22,33)

作用域

全局作用域
  1. 直接编写在script标签中的js代码,都在全局作用域
  2. 全局作用域在页面打开的时候创建,在页面关闭的实惠欧销毁
  3. 在全局作用域中有一个全局对象window,我们可以直接使用
    • 他代表的是浏览器的窗口,我们可以直接使用
    • 创建的变量都作为window对象的属性保存
    • 创建的函数都都会作为window对象的方法保存
  4. 使用【var】关键字声明的变量会在所有代码执行之前被声明,会在执行该条语句的时候被赋值,若果申明变量的时候没有使用【var】,则不会
  5. 函数的声明提前:使用函数声明形式创建的函数function函数(){},他会在所有代码的执行之前就被创建,所以我们可以在函数声明代码之前就调用
        fun(); //可以正确执行
        a(); //不可以被执行,因为var a语句只是在所有代码执行之前被声明了,而没有被赋值,真正的赋值操作在对应的代码行处,所以不能提前执行这个函数
        function fun(){
            console.log('wwwwww');
        }
        var a = function fun2(){
            console.log('aaaaa');
        }
函数作用域
  • 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
  • 每调用一次函数就会创建一个县的函数作用域,他们之间是相互独立的
  • 当在函数作用域操作一个变量的时候,他会先在自身作用域中寻找,如果有就直接使用,如果没有则选项上一级作用域寻找,知道找到全局作用域,如果全局作用域中也没有,就会报错,ReferenceError,在函数中想要访问全局变量,可以直接window.变量名
  • 在函数中不使用【var】申明的变量都会成为全局变量,相当于window.变量名
  • 函数中的形参和函数语句中的【var 变量】是一样的存在

【this】知识点

  • 在函数中this指向的是window对象
  • 在方法中this指向的是该方法的包含对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值