javascript执行原理

执行环境

当执行流执行到函数时会创建一个执行环境,这个执行环境包含了函数内部 语句可以访问的所有变量和函数,当代码执行完时,销毁执行环境。所以一般情 况下,局部变量在函数执行完时会被销毁。

作用域、调用对象

很多人认为作用域是在函数执行时创建的,这是有偏差的理解!

作用域分词法作用域和动态作用域:

  •  词法作用域是在函数定义的时候创建的,作用域的本质是创建它的外层函数的调用对象组成的对象链,函数内部属性[[scope]]指向此作用域。
  •  当调用函数时,会创建一个调用对象(有些地方称活动对象),这个调用对象保存了函数参数和局部变量。将此调用对象推入词法作用域的前端,因此执行时作用域发生了变化,称为动态作用域。

实质上作用域只有一个,都是内部属性[[scope]],词法作用域和动态作用域是时间上的不同造成的划分。作用域链是一条对象链,函数自己的活动对象,接着是父函数的活动对象,接着是祖父函数的活动对象。。。。 函数执行时,是沿着作用域链去寻找标识符的值的,先从自己的活动对象开始。 with、catch 会改变动态作用域,将with的对象和catch的对象压入作用域链前端。

下面出个例子看你是否对作用域链理解到位了:

var obj = {a:1,b:2};
var fn = function(){
     var c=3;
     var a = 5;
     console.log(a);   //a等于多少?
     with(obj){
         a=6;                        
         return function(){return a+c;};
     }
}(); 
fn();     //结果是多少?

 

闭包  

啥是闭包?

官方:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

民间:内部函数拥有外部函数的环境。

通俗的就是内部函数可以访问外部函数的变量。

形成机理:作用域链。

内存及变量查找效率

当有闭包,且内部函数赋给了外部变量引用时,要特别注意内存 。没有赋给外部变量时,代码执行完后执行环境销毁,不会有变量贮存内存。但赋给了外部变量时,闭包的词法作用域链会持有外层函数的活动对象,使得外部的变量不会回收。为了有效回收应该将变量设为null,断开引用。

var fn = function(){
    var div = document.getElementById("div");
    return function(){};    
};  //div不会销毁

 

根据作用域链的原理,处于作用链前端的变量会更快找到,所以尽量用局部变量。

1 var a,b,c;
2 var fn = function(){
3     var d,e,f;
4     return function(){ 
5         var h,j,k; 
6          return typeof nothing; //nothing这个变量查找了整条作用域链,直到查询到window中这个变量,才返回"undefined".
7     };    
8 };

this

this跟arguments一样是函数执行时,活动对象的一部分。this是动态的,函数执行时候绑定。

大概有这几种情况:

(1) 函数,this==window

var fn = function(){console.log(this==window);}; //true

fn(); //不管函数fn在任何地方定义,是顶层函数,还是嵌套 ,this都等于window

(2) 方法,this==obj

var obj = {};

obj.fn = function(){console.log(this==obj);}; //true

obj.fn();

(3)setTimeout setInterval,this==window

var obj = {};

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

setTimeout(fn,1000); //?

obj.fn = fn;

setTimeout(obj.fn,1000); //?

(4)call,apply将函数or方法绑定给了对象,this==obj

var obj = {};

var fn = function(){console.log(this==obj);}; //true

fn();

fn.call(obj);

(5)事件处理程序

DOM0

btn.onclick = function(){console.log(this==btn);}; //true

DOM2

btn.addEventListener("click",function(){
     console.log(this==btn);        //true
},false);

IE

btn.attachEvent("onclick",function(){
      console.log(window==btn);   //true
});

 

转载于:https://www.cnblogs.com/xuntu/p/3618896.html

afeizhong6575
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 运行原理解析
weixin_45566319的博客
09-22 724
说到JavaScript的运行原理,自然绕不开JS引擎,运行上下文,单线程,事件循环,事件驱动,回调函数等概念。本文主要参考文章[1,2]。 为了更好的理解JavaScript如何工作的,首先要理解以下几个概念。 JS Engine(JS引擎) Runtime(运行上下文) Call Stack (调用栈) Event Loop(事件循环) Callback (回调) 1.JS Engine 简单...
深入JavaScript的运行原理
m0_51636525的博客
05-31 1040
1.初始化全局对象 js引擎在执行代码之前,会在堆内存中创建一个全局对象:Global Object(GO) 该对象(GO) 所有的作用域(scope)都可以访问 里面会包含Date、Array、String、Number、setTimeout、setInterval等 其中还有一个window属性指向自己 2.执行上下文(Execution Contexts) js引擎内部有一个执行上下文栈(Execution Context Stack,简称ECS),它是用于执行代码的调用栈。 全局的代码块
探索JS引擎工作原理
dkjtyhj3671的博客
12-31 189
JavaScript 从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习 JS 引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈、全局对象、执行环境、变量对象、活动对象、作用域和作用域链等,这些概念正是JS引擎工作的核心组件。这篇文章的目的不是孤立的为你讲解每一个概念,而是通过一个简单的 DEMO 来展开分析,全局讲解 JS 引擎从定义到执行的每一个细节,以及这些概念在...
彻底理解JavaScript的运行原理
最新发布
qq_45730399的博客
08-09 1009
v8引擎的执行原理、 内存管理和垃圾回收、 JavaScript代码执行中的概念、 GO、VO、AO、作用域链、 全局代码执行步骤、 函数执行步骤和闭包
浏览器中JavaScript执行原理
weixin_30367543的博客
10-26 394
本章我们讨论javascript在浏览器中是如果工作的,包括:下载、解析、执行的全过程。javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而在chrchromium中,js是这样解析的:(其实第一章末尾已经有了) 至于一些步骤的解释,这里就不再复述了,不懂的请戳:浏览器渲染过程拉至末尾。 简直就是大魔王有木有?心中可有一...
JavaScript执行原理
weixin_45663697的博客
11-01 1039
本文章知识来源b站upobjtube的卢克儿 【干货】8分钟带你了解JS运行原理!写了那么多代码,还不知道JS是如何被运行的? 干货】8分钟带你了解V8引擎是如何运行JS!都2020年了还不知道什么是V8? 干货】6分钟带你掌握JS调用栈 | JS运行原理系列3 1. JS是如何被编译的 JavaScript初认识 JavaScript是由Brenddan Eich在1995年创建的,JavaScript在初期设计时基本就是很多语言的大杂烩 借鉴了C语言的基本语法 借鉴了Java语言的数据类型和内存管
JavaScript 执行原理浅析
ve7ev的专栏
07-08 1万+
/*最近在看公司的代码,发现公司的前端主要功能都是由js实现的。以前觉得js只是开发html采用的,始终抱有一种轻视之心。了解之后才发现js也是十分强大的.*/ 一、JS是什么? JavaScript是一种动态、弱类型、基于原型的语言,通过浏览器可以直接执行。通过这段话我们得到一下两个信息 第一 JavaScript 是一种语言,既然是语言那么功能必然强大,不可有轻视之心。(目前
javaScript核心原理
07-24
### JavaScript核心原理:深入理解对象与原型链 #### 前言 JavaScript 是一门高度抽象、面向对象的语言,广泛应用于Web开发中。它的核心特性之一就是处理对象(Object)的能力。对象不仅构成了JavaScript的基础数据...
高性能的javascript之加载顺序与执行原理
11-21
本文主要探讨了JavaScript加载顺序与执行原理,以及如何通过优化策略提升性能。 首先,当浏览器遇到`<script>`标签时,会暂停页面的渲染,先下载并执行脚本。这种行为会导致页面呈现的阻塞,特别是在脚本数量较多或...
JavaScript执行原理
热门推荐
郭宇的博客
06-05 1万+
JavaScript运行原理 单线程 JS引擎 执行栈 任务队列 同步、异步
JavaScript 执行原理
XOwl_online的博客
02-23 1077
JavaScript 执行原理,从代码到机器码这之间的转化过程。
JavaScript运行原理解析
weixin_34344403的博客
10-21 141
原文:1.http://blog.csdn.net/liaodehong/article/details/50488098          2.Stack的三种含义 (阮一峰)     3. http://lib.csdn.net/base/javascript   主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。 上图中...
浏览器JavaScript执行原理分析
weixin_46488959的博客
04-26 599
编译时后者会覆盖前者。
简述javascript执行原理,javascript执行原理
2301_79533350的博客
12-03 136
大家好,小编来为大家解答以下问题,简述javascript执行原理javascript执行原理,今天让我们一起来看看吧!
JavaScript的概念和执行原理
小魁的C世界的博客
05-31 1869
1.JavaScript 简介 JavaScript在1995年诞生,主要用途是进行用户输入的合法性验证
浅析Javascript运行原理
Jerry_zpon的博客
03-09 1312
Javascript是一种广泛应用于网页前端开发的脚本语言。本篇博客将深入探讨Javascript的运行原理,包括Javascript引擎、解释器和编译器、执行上下文、作用域和作用域链、事件循环、内存管理和异步编程等方面。
JavaScript 运行机制及原理
浮游的博客
03-10 4301
写js也有两年多了,一直对它的运行机制和原理不是很了解,今天特意把大神们的理论和自己的总结都记录到下面: 什么是JavaScript解析引擎 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。 比方说,当你写了 var a = 1 + 1; 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。 学过编译原理的人知道,对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compile
JavaScript脚本的执行原理
alanbiz1314的博客
04-29 1036
JavaScript是一种动态、弱类型、基于原型的语言,通过浏览器可以直接执行。 当浏览器遇到\<script>标记的时候,浏览器会执行之间的JavaScript代码。嵌入的js代码是顺序执行的,每个脚本定义的全局变量和函数,都可以被后面执行的脚本所调用。变量的调用,必须是前面已经声明,否则获取的变量值是undefined 转载于:https://www.cnblogs....
JavaScript执行原理与入门学习
JavaScript的世界里,脚本执行原理是理解和使用这门语言的关键。JavaScript是一种轻量级的、解释型的编程语言,主要用于网页和网络应用的开发。它允许动态内容的创建,从而提升了用户的交互体验。 当用户在浏览器...
写文章

热门文章

  • web安全色 409
  • ssh公钥认证原理及设置root外的其他用户登录ssh 370
  • javascript执行原理 298
  • ubuntu下搭建nginx+mysql+php-fpm站点 216
  • seajs的那些坑 179

最新文章

  • vue的Virtual Dom实现- snabbdom解密
  • express4.x的使用
  • mongodb的简明使用
2017年1篇
2014年12篇
2013年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家巫山玻璃钢雕塑珠海玻璃钢卡通雕塑销售厂开封房地产水景校园玻璃钢雕塑耐高温玻璃钢花盆研发公司湛江玻璃钢人物雕塑规格松江区拉丝玻璃钢雕塑制造厂家5月1日商场开业美陈广东玻璃钢雕塑造型信宜玻璃钢公仔雕塑图片中秋节商场美陈怎么做四川步行街玻璃钢雕塑图片玻璃钢雕塑工程供货商甘肃玻璃钢基督教雕塑玻璃钢金属雕塑厂家安庆商场美陈延安动物玻璃钢雕塑生产厂家四川开业商场美陈市场报价佛山玻璃钢卡通雕塑供应商家晋城太湖石玻璃钢雕塑厂家舒兰玻璃钢雕塑玻璃钢钢花盆玻璃钢仿玉石雕塑图片玻璃钢龙雕塑制作芦苞园林玻璃钢人物雕塑浙江常用商场美陈订购文博雕塑铜雕玻璃钢雕淮安商场美陈墙面武汉玻璃钢雕塑定制玻璃钢雕塑表面涂蜡毕节玻璃钢雕塑生产厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化