JavaScript作用域原理——预编译
来源:互联网 发布:linux常用命令rm 编辑:程序博客网 时间:2024/06/15 15:45
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程。并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数定义式和函数表达式)。
一、变量执行之前,会被赋为undefined
<p id="scope2" style="color:red"></p>
function echo(p, html) { p.innerHTML += html + '<br/>'; } var pscope2 = document.getElementById('scope2'); echo(pscope2, typeof param); //结果:undefined var param = 'defined'; echo(pscope2, typeof param); //结果:string
在调用函数执行之前, 会首先创建一个活动对象,然后搜寻这个函数中的局部变量定义和函数定义,变量的值会在真正执行的时候才计算,此时只是简单的赋为undefined。
二、函数定义式和函数表达式的不同
echo(pscope2, typeof scope2); //结果:function echo(pscope2, typeof func); //结果:undefined function scope2() { //函数定义式 }; var func = function() { //函数表达式 }; echo(pscope2, typeof func); //结果:function
对于函数定义式, 会将函数定义提前。而函数表达式,会在执行过程中才计算。
三、以段为处理单元
<script type="text/javascript"> echo(pscope2, typeof scope_next2);//结果:undefined</script><script type="text/javascript"> function scope_next2() { };</script>
<script type="text/javascript"> function scope_next2() {//以段为处理单元 pscope2.innerHTML += 'in first scope_next2<br/>'; }; //echo(pscope2, typeof scope_next2);//结果:undefined scope_next2();</script><script type="text/javascript"> var pscope2 = document.getElementById('scope2'); function scope_next2() { pscope2.innerHTML += 'in second scope_next2<br/>'; } scope_next2();</script>
两个同名的函数scope_next2,分别输出不同的内容,后一个没有将前面一个的内容覆盖掉。
对预编译的理解上可能还有些问题,欢迎大家来指正。
0 0
- JavaScript作用域原理——预编译
- javascript 预编译 作用域
- JavaScript预编译原理分析
- Javascript的预编译与变量作用域浅析
- 预编译 作用域例子
- javascript预编译原理和例子
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- Javascript作用域原理
- javascript作用域原理
- Javascript作用域原理
- Window7系统安装ElasticSearch服务
- java的会话管理:Cookie和Session(转)
- 二叉树的遍历Java实现
- 《疯狂拇指》 官方介绍
- Linux基础命令大全
- JavaScript作用域原理——预编译
- DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
- MYSQL 主从复制 简单实现
- WebStorm破解
- WEB_tar打包 后中文文件名乱码的问题
- 文本分类的python实现-基于SVM算法
- 链队列的c语言实现
- 工作十年,我是如何达到年薪40W以上
- 星星之火,可以燎原