奇怪的bug:javascript不执行】的更多相关文章

之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我们可以直观感觉到这种执行顺序,当然JavaScript代码的执行顺序是比较复杂的,所以在深入JavaScript语言之前也有必要对其进行剖析. 1.1  按HTML文档流顺序执行JavaScript代码 首先,读者应该清楚…
下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我们可以直观感觉到这种执行顺序,当然JavaScript代码的执行顺序是比较复杂的,所以在深入JavaScript语言之前也有必要对其进行剖析. 1.1  按HTML文档流顺序执行JavaScript代码 首先,读者应该清楚,HTML文档在浏览器中的解析过程是这样的:浏览器是按着文档流从上到下逐步解析…
熟语说“常在河边走,哪能不湿鞋”,在现实中我想说:“代码写多了,总会遇到奇怪的bug”,遇到bug不可怕,可怕的是不自己不知道这么解决,有些bug能当时解决,有些在自己知识水平提高后知道如何解决.还有些依然迷茫,在这做些总结归纳,顺便请教下牛人也是好的. 一.在一次调试样式的过程中,发现有个button死活不能居中,使用各种设置,如text-align等均无效,而在另一个页面中却很正常,百事不得其解,相同的样式设置但是就是无效,让人摸不住头脑.对于这样的问题,只是单独某个页面会出现,但是有部分页…
在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作. 这时候可能就需要了解一下JavaScript执行过程中的相关内容了. 执行上下文 在JavaScript中有三种代码运行环境: Global Code JavaScript代码开始运行的默认环境 Function Code 代码进入一个JavaScript函数 Eval Code 使用eval()执行代码 为了表示不同的运行环境,JavaScript中有一个执行上下文(Exe…
javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行. 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描. JavaScript是一段一段的分析执行的,在分析执行同一段代码中,定义式函数会 被提取出来优先执行.函数定义执行完毕后,才会按顺序执行其他代码. 一.代码块 JavaScript代码块是由一对script开始标签和结束标签包裹的一段代码. JavaScript是按照代码块来进行编译和执行的,代码块之间相互独立,但是前面执行的变量和方法,后面的代码块可以使用.…
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( function(){…} )()  和  ( function (){…} () )  是两种javascript立即执行函数的常见写法; 最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的; 后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一…
js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原…
深入理解javascript中执行环境(作用域)与作用域链 相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行环境分为全局执行环境和局部执行环境,其中局部执行环境我们又可以称之为函数执行环境.那么究竟什么使执行环境呢?通俗的说,执行环境即为代码执行时所处的环境.我们下来看一看如下代码,再进一步分析之. <script>var name="zhuzhenwei"; function ch…
看到一段代码: (function(){ var outer = $('#subject'); outer.find('li').on('mouseover', mouseover); })() ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,且这个函数必须是函数表达式,不能是函数声明. 这样写的作用: javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能…
http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html http://blog.csdn.net/hi_kevin/article/details/37761919    深入理解javascript之执行上下文(execution context)…
匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hello'); })();   这段代码的执行效果就是在页面再载入时…
原文:从头开始学JavaScript (九)--执行环境和作用域 一.执行环境:定义了变量或者函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有与之关联的变量对象. 变量对象:保存着环境中定义的变量和函数. 作用域链:保证对执行环境有权访问的所有变量和函数的有序访问. 标识符解析:沿着作用域链一级一级地搜索标识符的过程. 通过例子来说明执行环境.变量对象以及作用域链: <script type="text/javascript"> var color = &qu…
概念 执行环境(Execution context,简称EC)或执行上下文对象(后面统一用执行上下文表示),它定义了变量或者函数有权访问的其他数据,决定了他们各自的行为.是不是有点不好理解,那我先简单翻译下: js代码执行时所在的环境.继续后面 在JavaScript中执行环境分三种: 全局执行环境 : 这个是最外围的执行环境,一旦代码被载入,引擎最先进入的就是这个环境.在浏览器中,全局环境就是window对象,因此所有全局属性和函数都是作为window对象的属性和方法创建.全局执行环境直到应用…
在做面试题之前,我们先搞清楚两个概念 执行上下文(execution context) 变量对象(variable object) 执行上下文 我们都知道JavaScript的作用域一共分三种 全局作用域 函数作用域 eval作用域 实际上每一次的函数调用都会有一个对应的执行环境,这个执行环境也叫做执行上下文.执行上下文是一个抽象的概念,函数每调用一次就会产生一个新的执行上下文. 下面我们通过一段代码来理解下执行上下文的顺序: var fun0 = 'global context'; conso…
一.概述 同步更新sau交流学习社区(nodeJSBlog):javascript引擎执行的过程的理解--执行阶段 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍了语法分析和预编译阶段,那么我们先做个简单概括,如下: 1.语法分析: 分别对加载完成的代码块进行语法检验,语法正确则进入预编译阶段:不正确则停止该代码块的执行,查找下一个代码块并进行加载,加载完成再次进入该代码块的语法分析阶段. 2.预编译:通过语法分析阶段后,进入预编译阶段,则创建变量对象(创建…
参考原文:执行上下文 1.每一个执行上下文,工作分为三个阶段: 准备阶段–>执行阶段–>调用阶段 准备阶段:代码执行之前,设置数据,相当于初始化. 执行阶段:开始执行每一行代码. 调用阶段:可能没有.如果有函数调用,产生新的执行上下文.函数每被调用一次,都会产生一个新的执行上下文环境. 2.代码段 javascript在执行一个代码段之前,都会进行“准备工作”来生成执行上下文.这个“代码段”其实分三种情况——全局代码,函数体,eval代码. 全局代码是一种,这个应该没有非议,本来就是手写文本到…
既然今天要谈的是javascript的事件循环机制,要理解事件循环,首先要知道事件循环是什么. 我们先从一个例子来看一下javascript的执行顺序. <script> setTimeout(function() { console.log('定时器开始了.'); },0) new Promise(function(resolve) { console.log('马上执行for循环了'); for (let i = 0; i < 10000; i++) { i == 99 &&…
无意中学习到了一种测试 javascript 代码执行效率的一种方法,就记下来便于以后使用,用到了console对象中的  time  和  timeEnd  方法 . console.time('myFirstCode');  //开始(开始的名字要和结束的名字要一致哦) //你所要执行的 javascript程序 .... console.timeEnd('myFirstCode');    //结束 在浏览器控制台 console 这个按钮,查看代码执行时间…
平时面试经常会遇到类似下面的这种题,而且千变万化,让人一个头两个.示例这道题算是稍微有点难度的了,这种题考查的是JavaScript引擎执行代码的步骤. b = 'cba'; function a(a, a){ console.log(a); console.log(b); var b = 'abc'; a(); function a(){ console.log(a); console.log(b); } } a(5,10); 先上理论: (1)分析脚本的执行过程,也就是全局作用域下的代码.…
在讲这个问题之前,先来补充几个知识点,如果对此已经比较了解可以直接跳过 大多数游览器的组件构成如图 在最底层的三个组件分别是网络,UI后端和js解释器.作用如下: (1)网络- 用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作 (2)UI 后端- 用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口 (3)JS解释器- 用来解释执行JS代码ps:上图和知识点主要来自<HOW BROWSERS WORK: BEHIND…
理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题(原文文档) 1.什么是执行上下文: 简而言之,执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念,JavaScript中运行任何的代码都是在执行上下文中运行. 2.执行上下文类型: 执行上下文总共有三种类型: 1)全局执行上下文 这是默认的.最基础的执行上下文.不在任何函数中的代码都位于全局执行上下文中.它做了两件事:1.  创建一个全局对象,在浏览器中这个对象就是window对象.2. 将this指针…
javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. 执行代码 5. 销毁执行环境和活动对象(闭包情况下活动对象仍被引用没被销毁) 用例子来说明: function Person(name) { this.getName = function() { return name; }; this.setName = function(value) { n…
每日英语,每天进步一点点(偷笑): 前言 临近五一节,想到有 5 天假期,小林开始飘了. 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑. 结果一跑起来,发生不对劲,怎么一个简单脚本跑了 10 秒还没结束,于是立马直接 ctrl + c 一顿操作停掉了运行中脚本. 接着,习惯性的输入了 ls,结果 what? 找不到 ls 命令? 瞬间背后一凉,慌慌张张打开了脚本. 发现问题了,小林我写了个巨蠢的 Bug,间接执行了 rm -fr /* ,这不意味着我删库了?…
一.概念理解 1.关于javascript javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变.所以一切javascript版的"多线程"都是用单线程模拟出来的. 2.多线程/单线程的简单理解: 多线程: 程序可以同一时间做几件事. 单线程: 程序同一时间只能做一件事. 3.JS为什么是单线程的? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScri…
作者:小土豆 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 前言 在正文开始前,先来看两个JavaScript代码片段. 代码一 console.log(a); var a = 10; 代码二 fn1(); fn2(); function fn1(){ console.log('fn1'); } var fn2 = function(){ console.log('fn2'); }…
JavaScript的执行过程 前言 编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行.那么在解析阶段JS引擎又会进行哪些操作,接下来就一起来了解一下JavaScript在执行过程中的详细过程,包括执行上下文.GO.AO.VO和VE等概念的理解. 1.初始化全局对象 首先,JS引擎会在执行代码之前,也就是解析代码时,会在我们的堆内存创建一个全局对象:Global Object(简称GO),观察以下代码,在全局中定义了几个…
背景:有人想要个简单的js效果,点击某个菜单,其他菜单收起. 说了下思路,结果~~ 只好直接写了一个,代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="js/jquery-1.11.3.min.js&…
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境只能访问全局执行环境的变量和函数,不能直接访问局部环境中的信息:变量的执行环境有助于确定何时应该释放内存.离开作用域的值会被标记为可以回收,将在垃圾收集期间被删除.javascript中有“标记清楚” 和 “引用计数” 两种垃圾收集算法. 执行环境 (execution context) 执行环境是…
匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hello'); })(); 这段代码的执行效果就是在页面再载入时弹出:"hello" 是什么促使它自动执行的?,来看下面的代码 // 在传统写法上去掉小括号,并在前面加上运算符 ~,!,+,- ~function(){ alert('hello'); }(); !function(){ aler…
1>什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 - 当执行一个函数时,运行函数体中的代码. Eval的代码 - 在Eval函数内运行的代码. javascript是一个单线程语言,这意味着在浏览器中同时只能做一件事情.当javascript解释器初始执行代码,它首先默认进入全局上下文.每次调用一个函数将会创建一个新的执行上下文. 每次新创建的一个执行上下文会被添加…