预解释,作用域,闭包的理解

一、预解释,就是当代码执行的时候。对变量的预声明。

1、第一步是首先会查找带var和function关键字的代码。对其进行预声明的过程。

   对var的处理是先声明,然后赋值为undefined

   function的处理是声明并赋值。此处的赋值为为function开辟一个新的堆内存空间,用于存储函数体内的字符。注意此处的存储的就是字符串,并非js代码。只有在执行的时候才会转变为js代码。

二、作用域

  作用域和函数的定义有关系,和函数的执行没有关系。

三、闭包

  闭包其实可以理解为,每一个函数执行都是一个闭包。在javascript高级程序设计中的说法是:在一个函数中执行另一个函数。参照高级程序3版 P178。和权威指南6版p182

时间: 2024-07-31 17:23:44

预解释,作用域,闭包的理解的相关文章

作用域+闭包+this理解

函数预解析过程   函数会覆盖同名变量 也就是var  他的优先级高   如果是同名函数则后者覆盖前者   逐行解读代码的时候 表达式 和参数 会改变预解析仓库里面的值..也就是表达式能干掉函数   域和域之间的关系 <script>标签存在上下文关系   走完上下文标签的变量  下面的可以用上面的   自上而下  函数  json等 子级作用域到父级作用域的过程 叫作用域链        由里到外 当子级找不到变量 会到父级找  如果有表达式的话就会更改全局变量 也就是函数里面没有var  

JavaSript中变量的作用域 闭包的理解

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /* * 1.js中的变量都是公用的. 2.js中没有静态变量 3.闭包:函数内部可以调用函数外部的变量;反之,则不行 */ var r=10; fu

JS学习之闭包、this关键字、预解释、作用域综合

1 var num = 2;//window.number=2 2 var obj = { 3 num: 4, //obj.number=4 4 fn: (function () { 5 this.num *= 2; //自执行函数this是window的num,这里window的num=2*2=4 6 num = num * 2; //undefiend 7 var num = 3; 8 return function () { 9 this.num *= 2; 10 num *= 3; 11

关于预解释的理解

正式课---预处理 预处理的解释(变量提声) 在当前的作用域中,JS代码执行之前,浏览器首先会默认的把所有带var和function的进行提前的声明或者定义 1)理解声明和定义 var num =12; 声明(declare):var num; 告诉浏览器在全局作用域中有一个叫num的变量了 定义(defined) num=12;给变量赋值 2)对于带var和function的关键字的在预解释的时候操作还是不一样的 var在与解释的时候只是提前的声明 function在预解释的时候提前的声明+定

JS(数据类型、预解析、闭包、作用域、this)

1.数据类型的区别 基本数据类型:number.string.boolean.null.undefined 引用数据类型: 1-1:对象数据类型:Object.Array.Date.Regexp.String.Boolean等 1-2:函数数据类型function2.预解析(变量提升) 在当前作用域中.JS从上到下执行.首先把带var和function关键字的进行声明和定义 2-1:声明(declare):var num = 12; 在预解释状态为 var num = undefined; 2-

JS 预解释相关理解

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

预解释的初级理解

1.当浏览器加载html页面的时候,提供一个全局js代码执行的环境,即全局作用域 2.预解释:在当前作用域中,js代码执行之前浏览器会首先把var定义,把function定义且赋值(遇到function开一个内存空间地址,里面存函数内容的字符串) 3.预解释只发生在当前作用域,,如开始在window下预解释 函数执行的时候才会对函数中预解释因为作用域变了 4.js中内存的分类:栈内存和堆内存,栈内存用来提供js执行的环境(全局作用域 私有作用域),堆内存是存储引用数据类型的值(对象的键值对,函数

我理解的js中预解释

浏览器在执行代码前,先找带var和带function的地方,把带var的声明且赋予初始值undefined,把带function的声明且定义. 带var关键字预解释 让我们先看下这段代码执行的结果: alert(n);//弹出undefined var n = 10; 弹出的结果是undefined,为何不是10?让我们再看下面这段代码执行的结果: alert(n); n = 10; 运行报如下错误: 为何这次会报错,原因是代码在运行的时候,没有声明这个变量n:通过这两段代码的比较,我们发现带v

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

js代码如何执行的 浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释 - 带var : 提前声明 - 带function关键字的: 提前声明+定义 js中的栈内存(对应全局/私有作用域)和堆内存 <script> // 基本: num str boollen null undefied // 引用: [] {} \^$\ Date var num = 12; var obj = {name: "maotai", age: 22