JS变量和函数的一些理解
今日看了下JS变量的一些文章,有些感触,把自己总结的一些写出来。
JS初始化的过程
1.JS解释器执行代码之前,创建全局变量
2.用预定义的值和函数来初始化全局对象中的属性,
3.搜索函数外的var声明,创建全局对象相应的属性初始化为undefined
(如果遇到定义式函数,进行预处理,如果是赋值式函数,将函数当变量使用)
4.创建全局的执行环境,作用域链只有一个对象--全局对象
5.依次执行代码
6.遇到var声明的,给变量赋值,
遇到未声明赋值语句,在全局对象中增加相应的属性并赋值
遇到函数调用,创建嵌套函数的调用对象
7.搜索嵌套函数中的var声明和参数,创建嵌套函数的调用对象相应的属性,初始化为undefined
8.遇到var声明的,给变量赋值,(此时为局部变量)
遇到未声明赋值语句,在全局对象中增加相应的属性并赋值(注意:此时为全局变量)
依次类推
(多演示几遍就好了,就不一一贴出来了)
注意:
1.变量
var scope="global"; var f2 = function(){ console.log(scope); scope="local"; console.log(scope); } var scope="aaa"; console.log(scope); f2(); console.log(scope); //结果为:aaa aaa local local
2.赋值式函数和定义式函数
//此为定义式函数 function aa(){ console.log(aaa); } //此为赋值式函数 var aa = function(){ console.log('a'); } //区别 //定义式函数 var aa = 100; f1(); function f1(){ console.log(aa); } //结果为100 //赋值式函数 var aa = 100; f1(); var f1 = function (){ console.log(aa); } //结果为f1 is not a function //说明定义式函数在初始化的时候就已经被知道了
JS变量和函数的一些理解的更多相关文章
- js 变量、函数提升
js 变量.函数提升 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = 1; if (x) { var x = 2; } console.l ...
- js变量和函数声明的提升
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo = ...
- js 变量、函数提升 与js的预编译有关
参考网址:http://www.codesec.net/view/178491.html 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = ...
- js变量和函数声明的提升(转)
原文:http://zha-zi.iteye.com/blog/2037026 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var fo ...
- js变量和函数提升的小结
对于变量和函数一起的提升说法,我比较认同"LittleBear"的说法. 比如: <script> console.log(a)//function a(){} var ...
- JS——变量和函数的预解析、匿名函数、函数传参、return
JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...
- js变量和函数提升
写在前面: 变量提升是 声明提升,初始化不会提升,比如说 var a=1; console.log(a); 实际是这样执行(个人理解,仅供参考) var a; console.log(a); a=1; ...
- PHP基础班初学心得:脑洞实验-JS变量存储函数与return的一些问题
本人刚参加PHP基础班培训第一天,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. 在 ...
- JS 变量和函数提升 全局变量和局部变量
变量提升 1. var a = 10; function test() { a = 100; console.log(a); console.log(this.a); var a; console.l ...
随机推荐
- Yii;CodeIgniter;thinkphp学习
http://www.ibm.com/developerworks/cn/opensource/os-cn-yii/ http://codeigniter.org.cn/ http://baike.b ...
- MongoDB Replica Set 选举过程
什么是选举? 选举是副本集选择某个成员成为primary的过程.primary是一个副本集中唯一能够接收写操作的成员. 下面的事件能够引发一次选举: 第一次初始化一个副本集 Primary失效.rep ...
- C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命
使用面向对象的思想 用c#控制台代码模拟猫抓老鼠 我们先来分析一下猫抓老鼠的过程 1.猫叫了 2.所有老鼠听到叫声,知道是哪只猫来了 3.老鼠们逃跑,边逃边喊:"xx猫来了,快跑啊!我是老鼠 ...
- keepalived高可用
keepalived介绍 Keepalived是一个基于vrrp协议的高可用方案,vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务. 1. vrrp协议 VRRP是一种容错协议,它通过把几 ...
- jQuery管理包装集笔记
size():返回包装集中元素的个数. get([n]):返回一个DOM元素或DOM元素数组(接受负值). toArray():将包装里的所有元素作为DOM元素数组返回. eq(n):获取包装集中与i ...
- Ceph剖析:故障检测
作者:吴香伟 发表于 2014/10/10 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 心跳是用于OSD节点间检测对方是否故障的,以便及时发现故障节点进入相应 ...
- oracle impdp 导入
用imp语法导入dmp文件: imp mdm/mdm@SYSWARE file= E:\Product\9y5s\5.MDM\20161024.DMP full=y 报错 IMP-00002:无 ...
- Linux中的工作管理(Job Control )
以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...
- Maven中配置默认JDK版本
使用Maven构建项目时,默认是使用jdk1.3版本,目前很多使用泛型的项目肯定是无法通过编译,除了修改项目的pom文件外,还可以在Maven的配置文件settings.xml中添加如下配置来解决: ...
- fastjson自动转化参数报错
开发环境:spring-mvc4.1.7.fastjson1.2.7 问题描述:系统采用的前后端完全分离方式,前端页面使用ajax调用后台服务时,想用fastjson自动转化请求参数对象. // 前端 ...