[js]js栈内存的全局/私有作用域,代码预解释

js代码如何执行的

浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释

- 带var            : 提前声明
- 带function关键字的: 提前声明+定义

js中的栈内存(对应全局/私有作用域)和堆内存

<script>
    // 基本: num str boollen null undefied
    // 引用: [] {} \^$\ Date
    var num = 12;
    var obj = {name: "maotai", age: 22};

    function fn() {
        console.log("hello world")
    }

    /*

    1.浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存)
    2.执行js时候,需要预解释
      2.1声明+定义
      2.2预解释:
        - 带var            : 提前声明
        - 带function关键字的: 提前声明+定义

    3.
    栈内存: 提供供js代码执行的环境,作用域(全局和私有)
    堆内存: 用来存储引用数据类型的值. 对象存储的是属性名和属性值,函数存储的是代码字符串.

    全局作用域:
    私有作用域

    */
</script>

动手内存图可以感触到上面说的

原文地址:https://www.cnblogs.com/iiiiiher/p/8416676.html

时间: 2024-11-05 23:27:30

[js]js栈内存的全局/私有作用域,代码预解释的相关文章

js的栈内存和堆内存

栈内存和堆内存在了解一门语言底层数据结构上,挺重要的,做了个总结 JS中的栈内存堆内存 JS的内存空间分为栈(stack).堆(heap).池(一般也会归类为栈中). 其中栈存放变量,堆存放复杂对象,池存放常量,所以也叫常量池. 栈数据结构 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为是一种后入先出(LIFO,last-in-first-out)的数据结构.由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问.为了得到栈底的元素,必须先拿掉上面的元素. 堆

JS高级程序设计中对“私有作用域”的经典解释

JavaScript从来不会告诉你是否多次声明了同一个变量:遇到这种情况,它只会对后续的声明视而不 见(不过,它会执行后续声明中的变量初始化). 匿名函数可以用来模仿块级作用域并避免这个问题. 用作块级作用域(通常称为私有作用域)的匿名函数的语法如下所示. (function(){ //这里是块级作用域 })(); 以上代码定义并立即调用了一个匿名函数. 将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式.而紧随其后的另一对圆括号会立即调用这个函数. 如果有读者感觉这种语法不太好理解,

私有作用域的初级理解

1.全局变量:全局作用域下声明(预解释)的变量是全局变量 2.私有变量:私有作用域下,函数的形参和声明的变量 3.作用域链:在私有作用域下,执行代码的时候遇到变量,是私有变量则取私有变量,否则往上一级作用域查找直到找到 4.函数每次执行的时候,会形成一个新的私有作用域,然后按照如下步骤进行: a.如果有形参先给形参赋值 b.进行当前私有作用域的预解释 c.当前作用域的代码从上到下执行 5.闭包:函数执行形成新的私有作用域,里面的私有变量只在里面有效,与外面的毫无关系 <!DOCTYPE html

JS 预解释相关理解

1.JS中的内存空间分为两种:栈内存.堆内存 栈内存:提供JS代码执行的环境;存储基本数据类型的值; ->全局作用域或者私有的作用域其实都是栈内存 堆内存:存储引用数据类型的值(对象是把属性名和属性值存储进去,函数是把函数体中的代码当做字符串存储进去) 2.当浏览器加载我们HTML页面的时候,首先会提供一个供JS代码执行的环境->全局作用域(global->window) 3.在JS代码执行之前,浏览器还需要自己做一些事情:把所有带var/function关键字的进行提前的声明或者定义

JS中的预解释

1.什么是预解释? 在当前作用域下,JS代码执行之前,首先会把带var/function关键字的进行提前的声明(declare)或者定义(defined). 2.预解释是如何操作的? a.带var关键字的在预解释阶段只完成了提前的声明:b.带function关键字的在预解释阶段完成了声明和定义两个操作. 3.预解释的注意点? a.不管条件判断是否成立,判断体中的内容都要进行预解释: 例如:if (!('a' in window)) { var a=12;  //判断'a'是否为window的一个

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建

js私有作用域(function(){})(); 模仿块级作用域

摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: for(var i=0;i<10;i++){ alert(i); } alert(i); for循环后的i,在其它语言像c.Java中,会在for结束后被销毁,但js在后续的操作中仍然能访问到i值,即for循环后的alert(i);会弹出数值i=10; js模仿块级作用域: (function(){

js学习笔记1(变量、作用域、内存)

写在前面,舍弃叽叽歪歪,只做学习笔记,认真踏实. 学习书籍:javascript高级程序设计3版. 章节4.1 基本类型和引用类型 1.基本类型在内存中占据固定大小的空间,所以保存在栈内存中. 2.从一个变量向另一个变量复制基本类型的值的时候,会在栈中保存另一个副本. 3.引用类型的值是对象,保存在堆内存中. 4.包含引用类型的值的变量,包含的不是对象本身,而是指向该对象的在堆内存中的位置的指针. 5.确定一个值是哪一种基本类型,可以用typeof.确定一个对象是哪一种引用类型,可以使用inst

js高程 第 4章 变量、作用域和内存问题 【笔记】

4.4 小结 JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自以下 5 种基本数据类型:Undefined.Null.Boolean.Number 和 String.基本类型值和引用类型值具 有以下特点: ? 基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中: 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本: ? 引用类型的值是对象,保存在堆内存中: ? 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针: