进阶学习js中的执行上下文】的更多相关文章

在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文. 1.当遇到变量名和函数名相同的问题. var a = 10; function a(){ console.log(1); } a(); //报错 如果你觉得函数a会覆盖变量a那你肯定是js的新朋友,为什么这里会报错呢?我记得我在基础的执行上下文文章中说过变量声明提前的概念,对这里就是因为这个原因,但是在上面一篇文章中还有一个问题我没有去讲. 那就是函数的声明比变量的声明顺序…
console.log(a); //Uncaught ReferenceError: a is not defined 因为没有定义a所以报错了. var a = 52; console.log(a); 有定义a,并且给a赋值了52所以打印a就是52. console.log(a); //undefined var a = 52; 虽然有定义a但是打印却在变量a的前面,那为什么不是报错而是打印出来的是undefined?因为在js执行代码之前,js会先获取到所有的变量并且把这些变量放置到js代码…
0.开场白 在平时编写JavaScript代码时,我们并不会和执行上下文直接接触,但是想要彻底搞懂JavaScript函数的话,执行上下文是我们绕不过去的一个知识点. 1.执行上下文栈 JavaScript在对一个函数的每次调用,都会创建一个执行上下文,然后基于这个执行上下文运行函数体内的代码.一个函数可能会创建无数的执行上下文,因为对函数的每次调用(即使在函数内部调用自己)都会创建一个具有新状态的上下文. 当函数a执行的时候,会创建一个函数a的执行上下文,然后执行函数a中的代码,在函数a中调用…
最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 理解了执行环境,现在就看看什么是作用域链吧.每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执…
window 是最大最外围的执行环境,然后每个函数都有自己的执行环境.JS代码是从上到下执行的,单纯的用语言描述可能会有点绕,而且不大直观.我们看着代码来 console.log('global begin:' + i); var i = 1 foo(1) function foo(i){ if(i == 4){ return } console.log('foo() begin:' + i); foo(i+1) console.log('foo() end:' + i); } console.…
关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一些操作的状态或错误信息 promise有三种状态 pending(进行中).resolved(已完成,也叫fulfilled).rejected(已失败) 注意:promise中的状态只能由 pending -> resolved 和 pending -> rejected两种,且状态一旦确认不能…
[转] 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题. 为什么要学习this?如果你学过函数式编程,面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂…
js中取小数整数部分函数 丢弃小数部分,保留整数部分 js:parseInt(7/2) 向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 四舍五入 js: Math.round(7/2) 向下取整 js: Math.floor(7/2) 附:如何判断输入的数值类型(使用时不带引号!) 其实就是利用正则表达式. "^\\d+$" // 非负整数(正整数+0) "^[0-9]*[1-9][0-9]*$"// 正整数 "^((-\\d+)|(…
假如想统计JS中的函数执行次数最多的是哪个,执行时间最长的是哪个,该怎么做呢? 1. 统计函数执行次数 2. 统计函数执行时间 3. 如何控制函数的调用次数 4. 如何控制函数的执行时间 一.统计函数执行次数 常规的方法可以使用 console.log 输出来肉眼计算有多少个输出 不过在Chrome中内置了一个 console.count 方法,可以统计一个字符串输出的次数.我们可以利用这个来间接地统计函数的执行次数 function someFunction() { console.count…
1.执行机制 JS 是单线程的,处理 JS 任务(程序)只能一个一个顺序执行,所以 JS 中就把任务分为了同步任务和异步任务.同步的进入主线程先执行,异步的进入Event Table并注册函数,当指定的事情完成时,Event Table会将这个函数移入事件队列Event Queue,等待主线程内的任务执行完毕,然后就会从事件队列 Event Queue 中读取对应的函数,进入主线程执行. 除了广义的同步任务和异步任务,JS 对任务还有更精细的定义: macro-task(宏任务):包括整体代码s…
作者:知乎用户链接:https://www.zhihu.com/question/23564807/answer/82996422来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行 如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而…
首先介绍一些即将用到的概念: 执行环境:  它定义了变量和函数有权访问其他数据的范围,每一个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中.   所有javascript代码都是在一个特定的执行环境中被执行的,当调用一个javascript函数时,就会创建相应的执行环境,如果又调用另外一个函数,则又会创建一个新的执行环境,当调用函数返回后,执行过程会返回原始的执行环境,所以javascript的执行环境明显是按照栈的形式存储,即这一系类的执行环境构成了一个执…
大纲: 主体: 注意:*******函数调用时才会产生上下文栈,声明时不会产生********** 顺序: 概念图: 执行上下文栈的顺序---→后进先出 其他概念图: 当前执行的上下文总是在顶部 全局执行上下文总是在底部 [面试题] 递归调用:在函数内部去调用本身 递归一般都会有退出条件,不然会是死循环 接下来简单做下修改 结果: 整个过程有5个执行栈 出栈与入栈顺序刚好相反,类似于箱子放东西 后入先出 入栈:                                           …
1.代码分类 2.全局执行上下文 3.函数执行上下文 .…
/*最流行的写法*/ (function() { alert("run!") })(); /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */ !!!(function() { alert("run!") })(); (function() { alert("run!") }).call(); (function() { alert("run!") }).apply(); (function() { alert(…
JS高级程序设计(3rd)中对闭包的定义就是一句话,首先闭包是一个函数,怎样的函数呢?有权访问另一个函数作用域中的变量 的函数.而创建闭包的常见方式就是在一个函数的内部创建另一个函数,就是嵌套函数.     闭包会涉及到的点主要有 ①     作用域链(这个原理让我们明白内部嵌套的函数是能够访问外部父函数里定义的变量的,而对于嵌套函数来说引用了非自己作用域内定义的这些变量通常又被称为自由变量)   ②     函数执行的机制(这个又涉及到执行环境execution context ,环境栈(注意…
写在前面 JS因为是单线程的,所以在执行事务的时候,往往会因为某个事务的延迟,而导致服务器假死,这时候异步编程就显的格外重要,但是异步编程一般理解为回调函数callback,典型的就是node,回调函数的层层嵌套又导致程序过于冗余,因为闭包的存在,导致了内存的泄露或者误改上一层回调函数的参数,于是又有一个疑问,能不能用同步的方式去写异步,ES6的promise就是以同步流程的方式写出异步操做,但是piomise原生操作写起来比较长,能不能简介操作promise,ES7就又出现async/awai…
Markdown在线编辑器 - www.MdEditor.com 1 首先关于数据类型,有基本数据类型,和引用数据类型 基本数据类型有:number,string,boolean等:引用数据类型一般指object 栈:大小固定:堆:大小不固定:栈中存放一些基本的数据类型,和引用数据类型的地址:堆中存放引用数据类型的实际值. 造成问题,当两个变量指向同一个地址时,引起数据的同步修改 <script> window.onload =function(){ var arr1 =[1,2,3,4,5]…
1.如果载入的2个js文件中有重名函数,那么调用的时候怎么分别调? 第二个文件载入无效. 2.checkbox jQuery对象的checked属性在选中时为checked,否则为undefined: DOM对象的checked属性在选中时为 true, 否则为 false. 3.本条内容摘自<JavaScript语言精粹>--电子工业出版社 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. (1)函数声明: function funName(arg0,arg1,arg2) {   …
( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一些函数的基本概念. 函数声明.函数表达式.匿名函数 函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName…
我在写代码时候经常会在tpl的<script>里写类似的代码: $(function(){ alert("我好饿"); }); 刚开始的时候只知道写了它不需要调用,直接执行,就这样依葫芦画瓢,我写了很多代码.说道这,还要说说这货的加载顺序,如果把代码直接写到script标签里,当页面加载完这个script标签就会执行里边的代码了.如果在这代码里用到了未加载的dom或者调用了未加载的方法,是会报错的.言归正传,这个函数其实就是自执行函数,很多人会比较专业地称为"立即…
perl中的上下文 在perl中,很多地方会切换上下文.所谓上下文,它的重点在于同一个表达式出现在不同地方,得到的结果不同.换句话说,同一个表达式,它表达的值不是固定的.这就像是同一个单词,在不同语境下的意思不同. 例如,运算操作符决定数值是一个数字还是一个字符串. 2 * 3 2 x 3 2 * 3中的2和3都是数值,因为操作符*是算术运算符,它要求两边都是数字.而2 x 3中的2是字符串,3是数字,因为操作符x是这样要求的. 还有,对数组@arr的两种操作: @arr=qw{perl,pyt…
1.匿名函数不能单独定义,必须进行赋值操作或者立即执行,否则会被JS引擎定义为语法错误 function(){alert(dada);} VM229:1 Uncaught SyntaxError: Unexpected token 2.在函数体后面加括号就能立即调用,这个函数形式必须是函数表达式,不能是函数声明 function(){alert(123);}(); VM265:1 Uncaught SyntaxError: Unexpected token ( 3.可以在函数前面加符号,或者用括…
在理解了一些函数基本概念后,回头看看( function(){…} )()和( function (){…} () )这两种立即执行函数的写法,最初我以为是一个括号包裹匿名函数, 并后面加个括号立即调用函数,当时不知道为什么要加括号,后来明白,要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明. (function(a){ console.log(a); //firebug输出123,使用()运算符 })(123); (function(a){ console.log(…
<!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title>回调函数(callback)</title> <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.9.0/jquery.min.js"></script&g…
一.统计函数执行次数 常规的方法可以使用 console.log 输出来肉眼计算有多少个输出 不过在Chrome中内置了一个 console.count 方法,可以统计一个字符串输出的次数.我们可以利用这个来间接地统计函数的执行次数 function someFunction() { console.count('some 已经执行'); } function otherFunction() { console.count('other 已经执行'); } someFunction(); //…
//自执行写法1 (function T(){ alert(1) })() //自执行写法2 var T1=function(){ alert(1) }(); //传值 var para1={a:1;b:2,c:'Ok'} var T1=function(obj){ alert(obj.a) }(para1);   //如果不用自执行方式,就得调用 function T(){ alert(1) } T();//调用 ...手写的,....   http://www.php.cn/js-tutor…
方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行方式二,调用函数,得到返回值.强制运算符使函数调用执行(function(){})(); 是 把函数当作表达式解析,然后执行解析后的函数相当于 var a = function(){}; a(); a得到的是函数(function(){}()); 是把函数表达式和执行当作语句直接执行.相当于 var a = function(){}(); a得到的是结果最终结果是一样的.()只是起了 自执行的作用和 () 一样的还有…
如果你不知道什么是作用域,建议你先看什么是作用域链,什么是原型链.这篇文章,因为这些内容都是有关联性的. 什么是自由变量? 如我在全局中定义了一个变量a,然后我在函数中使用了这个a,这个a就可以称之为自由变量,可以这样理解,凡是跨了自己的作用域的变量都叫自由变量. var a = "追梦子"; function b(){ console.log(a); //追梦子 } b(); 上面的这段代码中的变量a就是一个自由变量,因为在函数b执行到console.log(a)的时候,发现在函数中…
1.js中的执行上下文或者执行环境:execution context,简称EC; 2. console.log(a);//undefined var a=200; fn('lili'); function fn(name){ age=23; console.log(name,age);//lili 23 var age; } 分析这段代码的执行过程:首先需要记得, 在js中,存在变量提升.函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶端,因此一般在写代码的时候,通常我们在每个作…