Javascript 果然存在所谓的预编译,例证:
1.变量预编译:
var test_a = 'a test';
function test1(){
alert(test_a);
}
function test2(){
alert(test_a);
var test_a = "a test in function";
alert(test_a);
}
test1();
test2();
结果
:[a test] [undefined] [a test in function];
个人理解(也参照了网上的很多解释):
浏览器在执行一个作用域内的javascript代码时,会预先将以var定义的变量标记为已定义(相当于在该作用域内注册),并“赋初值:undefined”;
执行代码时遇到变量引用,会先定位作用域内已经定义的变量,若找到则使用该变量(在test2中test_a已经被预定义了,所以可以找到,则会输出其值——undefined),若找不到则向父作用域定位变量,一直到window作用域,假如一直到最后都未找到该变量,那么程序到此会报错,说“变量未定义”;
可以再试试下面的代码,以便加深理解:
function test1(){
alert(test_a);
test_a = "a test in function test1";
alert(test_a);
}
function test2(){
alert(test_a);
var test_a = "a test in function";
alert(test_a);
}
test1();
test2();
alert(test_a);
var test_a = 'a test';
// test_a = 'a test'; 试着去掉该句注释,然后将上一句注释掉看看会怎么样
2.函数预编译:
myfunc();
function myfunc() {
alert("myfunc for the first time");
return false;
}
myfunc();
myfunc = function() {
alert("myfunc for the second time");
return false;
}
myfunc();
function myfunc() {
alert("myfunc for the third time");
return false;
}
myfunc();
alert(myfunc);
结果
:
[myfunc for the third time]
[myfunc for the third time]
[myfunc for the second time]
[myfunc for the second time]
[function () {
alert("myfunc for the second time");
return false;
}]
个人理解(也参照了网上的很多解释):
暂时只讨论一个作用域内平级的函数块(不同作用域也不会产生重名)。浏览器在执行一个作用域内代码时,也会预先对function fun(){}形式的函数进行“预编译”,并且对于重名的函数,只保留其最后一次的定义的代码逻辑。执行过程中将不再对function fun(){}形式定义的同名函数的逻辑进行重写,但是遇到fun=function(){}这样形式的重名函数,浏览器又会重写fun函数中的代码逻辑(真是怪哉
)。
并且,和变量一样,函数形如var func = function(){}的,在预编译中也会被“注册”到本作用域的已定义变量中,并且初值赋为“undefined”,所以这样定义的函数不能在赋值之前这样执行func(),否则会报错:"func is not a function",因为正式赋值之前浏览器就将它看做一个普通变量(初值为undefined)
分享到:
相关推荐
C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用
【狂神说系列 JavaScript笔记】是一份全面且深入的JavaScript学习资源,旨在帮助开发者和初学者深入理解这门广泛应用于Web开发的脚本语言。这份笔记涵盖了JavaScript的基础语法、核心概念以及高级特性,旨在构建一个...
5. **版本控制**:预编译有利于版本控制,因为预编译后的文件与源码分开管理,可以更容易地比较和回滚不同版本的静态资源。 在预编译过程中,通常会涉及到以下技术: - **模板引擎**:例如Jinja2、ERB或Razor,...
《Effective JavaScript(中文版).pdf》这本书是JavaScript编程的经典之作,它包含了68个具体的实践建议,涵盖了语言的基础到高级特性。每个建议都通过实例来解释,旨在提高代码的质量和效率。书中的知识点包括但不...
不过,由于【标题】中提供了文档的名称——"JavaScript函数式编程.pdf",我可以根据这个名称扩展出关于JavaScript函数式编程的知识点。 JavaScript函数式编程的知识点非常丰富,涉及很多方面的内容,下面将详细介绍...
预编译简单理解就是在内存中开辟一些空间,存放一些变量与函数 ; 2-JS预编译什么时候发生 预编译到底什么时候发生? 误以为预编译仅仅发生在script内代码块执行前 这倒并没有错 预编译确确实实在script代码内执行...
`gulp`是一个自动化任务管理工具,常用于JavaScript项目的构建流程,包括编译SCSS(Sass预处理器语言)成CSS、压缩JavaScript代码、合并文件等。通过配置`gulpfile.js`,可以实现自动化工作流,提高开发效率。 `...
尽管JavaScript与ECMAScript在概念上有所区别,但通常情况下,人们将它们视为同义词,因为ECMAScript是JavaScript的标准化版本,由各大厂商如Mozilla、Microsoft等遵循并实现。 JavaScript的特点包括: 1. 解释型...
《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...
JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数(ppt)JavaScript之函数...
在JavaScript中,匿名函数是一种没有名称的函数,通常作为参数传递或者用于立即执行。在上述文档中,我们看到几种不同的匿名函数使用方式: 1. **匿名函数自执行**:`(function(){})()`,这种写法会立即执行该匿名...
这个菜鸟的笔记里面没有谈到JavaScript中的对象,比如说时间对象和字符串对象,这些内容可以在“菜鸟的JavaScript对象笔记”中找到。不过因为小菜鸟个人认为HTML DOM比其它的JavaScript对象更常用一些(不过这可不...
8. **JavaScript插件API**:预编译版中的JavaScript插件可以通过jQuery API进行交互和自定义,例如,通过调用$('#myModal').modal('show')来显示一个模态框。 9. **自定义构建**:虽然预编译版不包含在内,但...
通过预编译,开发者可以在开发阶段就处理好模板,生成静态的JavaScript函数,从而在运行时只需传递数据即可快速生成动态页面。 二、工作原理 预编译工具通常接受一种特殊的模板语法,如Mustache、 Handlebars 或 ...
JavaScript还涉及事件处理,异步编程如回调函数和Promise,以及ES6引入的新特性,如箭头函数、模板字符串和解构赋值。 **前端学习路径** 作为前端学习的宝典,这份笔记可能还会涵盖一些额外的主题,比如浏览器的...
十、JavaScript与Node.js JavaScript不仅用于浏览器环境,还可以通过Node.js在服务器端运行。Node.js提供了丰富的服务器开发API,支持非阻塞I/O,适合构建高性能的网络应用。 这份学习笔记将详细解释以上各个知识点...
JavaScript提供了多种输入输出工具,用于与用户进行交互。`prompt()`函数用于显示一个对话框,提示用户进行输入,可以有两个参数,第一个是对话框中显示的纯文本,第二个是默认的输入文本。`alert()`函数用于弹出一...
JavaScript方法是预定义的函数,如`Array.prototype.forEach()`用于遍历数组,`String.prototype.trim()`用于去除字符串两端的空白字符等。理解并熟练使用这些内置方法能够极大地提升代码的效率和可读性。 在...
JavaScript是一种广泛应用于网页和网络应用的脚本语言,它主要负责网页的动态交互,使得用户在与网页交互时能够得到即时反馈。对于初学者来说,理解JavaScript的基本语法、数据类型、控制结构、函数以及事件处理是...
* 函数是JavaScript中的一种基本结构单元 * 函数可以封装一组语句,实现功能的复用 * 函数可以传递参数,实现参数的传递 * 函数可以返回值,实现结果的返回 三、 JavaScript 中的对象 * 对象是JavaScript中的一种...