今天看到一段很有趣的js代码
var a = 1;
function b() {
a=10;
return;
function a(){
};
}
b();
alert(a);
最后输出结果为1
js 在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。
在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = ...这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
换个角度来说,这个是函数体升迁的问题,如果是用 var fn = function() 这种形式来定义,那么 fn 会升迁,但是函数体不会升迁,因此会报告错误说 fn 不是一个方法(注意不是报告未定义),而如果使用 function fn() 来定义方法,那么 fn 和函数体会同时升迁,这样 fn() 是可以调用到结果的
也就是js的执行和预编译是分开的,先预编译再执行,所以变量声明可以放在执行之后
也就是说函数把全局变量变为了局部变量
分享到:
相关推荐
笔者精选了近300段JavaScript代码和400种解决方案,覆盖了几乎所有的脚本处理模块,最大程度地帮助读者学习、实践JavaScript的各个方面,让读者成为一个有代码实践、有思想品质、有技术深度的JavaScript高手。...
一段js代码
在描述中提到的"一个JS代码一个JS代码"可能是在强调连续的代码片段或逻辑单元,这在实际编程中非常常见,每个代码段执行特定的任务。例如,我们可能会有一个用于处理用户输入的函数,另一个用于更新UI状态的函数。 ...
标题 "处理ajax返回的js代码" 涉及的核心知识点是使用Ajax技术动态获取并执行JavaScript代码。Ajax(异步JavaScript和XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换...
`example-inline.php`可能包含一段内联的JavaScript代码,通过调用`JavaScriptPacker`的函数进行加密。而`example-file.php`可能是读取一个外部JS文件,然后对其进行加密处理。这些示例代码可以帮助初学者快速理解和...
这段浪漫代码是通过HTML、CSS和JavaScript编写的,通过结合这三种前端技术,我们创建了一个令人心动的情人节表白页面。包含了逐行打印文字、变色效果和玫瑰花的飘落等特效。它能够营造出浪漫的氛围,并用创意的方式...
标题“一段不错的弹窗代码,很方便”暗示我们这里有一个简洁且实用的弹窗实现,易于定制和使用。描述中的“只要修改里面的网站地址”进一步说明了这个弹窗代码的核心功能可能与导航或链接到特定网站有关。 在这个...
在"很精彩的一段JS"这个主题中,我们可以深入探讨JavaScript的核心概念以及如何利用JS进行高效编程。 首先,JavaScript的基础包括变量、数据类型、操作符、控制结构、函数等。变量是存储值的容器,JS支持六大数据...
标题 "一段简单实用的代码.zip" 提供的信息表明,这个压缩包包含的是一段或一组可用于实际应用的代码。在IT行业中,简单的实用代码通常指的是能够解决特定问题、易于理解和执行的小型代码片段。这样的代码可能涵盖...
在JavaScript编程中,有时我们需要实现一个功能,使得手机端的活动弹窗每天只显示一次,以避免对用户造成过多的打扰。这个需求涉及到浏览器的本地存储(localStorage)以及JavaScript的时间和日期处理。以下是一个...
1. **说明.htm**:这是一个HTML文件,很可能包含了关于如何使用这段代码的详细说明,包括可能的HTML结构、CSS样式以及JavaScript代码的使用方法。用户可以通过打开这个文件来理解代码的工作原理和部署步骤。 2. **...
"页面代码高亮度显示JS代码"是一个专门用于在网页上实现这一功能的JavaScript库。这种库通常会通过解析代码的语法结构,为不同的语言元素(如关键字、变量、字符串等)赋予不同的颜色或样式,从而提升代码的可读性。...
JS脚本注入是一种常见的网页攻击手法,通过注入恶意脚本来控制网页的行为。在这个实例中,我们将展示如何使用JS脚本注入来突破网页本地脚本验证方法,跳过验证码,并自动批量查询信息。 网页JS脚本注入的基本理论是...
这篇“超实用的JavaScript代码段”文档很可能包含了许多常用的、实用的JavaScript函数和技巧,可以帮助开发者提高效率,解决实际问题。 首先,JavaScript的基础知识包括变量声明(var、let、const)、数据类型...
本压缩包“js右侧悬浮在线客服代码.zip”显然包含了一段用于创建网页右侧悬浮的在线客服功能的JavaScript代码。这种功能常见于许多网站,为用户提供即时帮助和咨询服务。 首先,我们需要了解JavaScript如何实现悬浮...
在JavaScript编程中,动态插入脚本是一种常见的技术,用于在页面加载后或者根据某些条件按需加载外部的JavaScript文件。这种技术在处理大型应用、优化页面性能或实现异步加载时非常有用。本文将详细介绍如何让动态...
"JS代码混淆软件"是一个小巧而实用的工具,它可以帮助开发者快速地对JavaScript代码进行混淆。以下是一些常见的JS代码混淆工具: 1. UglifyJS:一个流行的JavaScript压缩和混淆工具,可以删除未使用的变量、函数,...
`loadUrl()`通常用于加载整个网页或者执行一段JS代码,例如: ```java webView.loadUrl("javascript:myJSFunction()"); ``` `evaluateJavascript()`则更高效,它会直接返回JavaScript表达式的执行结果,适合进行...
一段JavaScript是如何执行的js事件循环异步任务异步任务队列测试代码结果调试执行结果 js事件循环 当我们执行一行js代码时,如果是同步任务,就把它直接放到执行栈里面去执行,如果是异步任务,会把它放到一个异步的任务...
HTML 背景轮播 JS 代码是一段可以插入 HTML 页面的 JavaScript 代码,用于实现背景图片轮播效果。这段代码可以直接嵌入 HTML 代码的最后面,以实现页面背景图片的轮播功能。 知识点 1: JavaScript 变量声明 在这段...