今日看了下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变量和函数的一些理解的更多相关文章

  1. js 变量、函数提升

    js 变量.函数提升 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = 1; if (x) { var x = 2; } console.l ...

  2. js变量和函数声明的提升

    函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo =  ...

  3. js 变量、函数提升 与js的预编译有关

    参考网址:http://www.codesec.net/view/178491.html 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() { var x = ...

  4. js变量和函数声明的提升(转)

    原文:http://zha-zi.iteye.com/blog/2037026 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var fo ...

  5. js变量和函数提升的小结

    对于变量和函数一起的提升说法,我比较认同"LittleBear"的说法. 比如: <script> console.log(a)//function a(){} var ...

  6. JS——变量和函数的预解析、匿名函数、函数传参、return

    JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...

  7. js变量和函数提升

    写在前面: 变量提升是 声明提升,初始化不会提升,比如说 var a=1; console.log(a); 实际是这样执行(个人理解,仅供参考) var a; console.log(a); a=1; ...

  8. PHP基础班初学心得:脑洞实验-JS变量存储函数与return的一些问题

    本人刚参加PHP基础班培训第一天,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. 在 ...

  9. JS 变量和函数提升 全局变量和局部变量

    变量提升 1. var a = 10; function test() { a = 100; console.log(a); console.log(this.a); var a; console.l ...

随机推荐

  1. C# 获取excel架构并的导入sqlserver的方法

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. hdu 3579 Hello Kiki (中国剩余定理)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. DUILIB圆形头象

    #ifndef __UIHEADICON_H__#define __UIHEADICON_H__ /* 名称:圆形头像控件(派生CButtonUI类)*/ class CHeadUI: public ...

  4. POJ3020 匹配

    题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...

  5. es6新特性(一)

    关于es6,阮一峰的<ECMAScript 6入门> http://es6.ruanyifeng.com/写的非常详尽,可以经常看看,这里是对这本书进行一个缩略,可能有误,欢迎大家纠正.

  6. 传统B2B中小型企业如何做好全网营销

    优网特独创全网营销服务理念,全网营销即以企业网站推广为核心,通过SEO.SEM.BBS营销.博客营销.微营销.即时通讯营销.网络口碑营销.视频营销.邮件营销.SNS营销等网络营销手段,全面提升企业网站 ...

  7. android开发学习笔记001a

    Android 应用与开发环境 1.使用SDK版本:Android 2.3 . 2.发展和历史 创始人:Andy Rubin,Android公司被Google收购.07年11月5日1.0发布. 3.平 ...

  8. Httpoxy远程代理感染漏洞 [转]

    Httpoxy是一个最新曝出的一个CGI程序漏洞,它主要可能威胁到运行在CGI上的PHP,Go,Python和其他代码程序语言. 0×01  什么是httpoxy? 具体来说, httpoxy是一组影 ...

  9. 【转】Nginx服务器详细配置含注释

    #使用的用户和组 user www www; #指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍) worker_processes 8; #指定错误日志存放的路径,错误日志的记录级别可为de ...

  10. Swift入门学习之一常量,变量和声明

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...