ECMAScript 不介意传进来多少个参数,也不介意传进来的参数类型。
 
 
理解参数:
     命名的参数只提供便利,不是必需的。
 
 
ECMAScript 的变量包含两种不同的数据类型的值。分别是
  • 简单的数据构成的基本数据型值,不能给基本型值添加属性:
          var name = "kevin";
          name.age = 27;
          console.log(name.age);     //undefined
  • 多个值构成的对象,引用类型值.引用类型的值,可以添加动态属性,并可以改变这个动态属性的值或者可以删除这个动态属性的值
          var name = new Object();
          name.age = 27;
          console.log(name.age);     //27
 
ECMAScript 操作对象,实际上是在操作对象的引用而不是实际的对象。
 
复制变量值
 
  • 基本类型的值
          var name = "kevin";
          var name2 = name;        //name的值是kevin;name2的值同样也是kevin;它们在各自的作用域中参与任何操作都不会互相影响,因为name2是独立的,互不干涉的。
  • 引用型值
          var name = new Object();
          var name2 = name;
          name.age = 27;
          console.log(name.age);   //27  与上面的基本类型的值不同的是,这里的name2实际上是name的一个指针,而这个指针指向name的一个对象,因此,这个name2同样引用的是一个对象,而且与name是同一个对象。
 
传递参数
 
     ECMAScript中所有的函数的参数都是按值传递的。
     
  • 基本类型的参数传递,按值传递
          在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量,就是arguments对象中的一个元素。
          function add(num){
               num = 30;
               console.log(num);      //这个参数实际上是这个函数的局部变量,它的值仍为30
          }
 
          var num2 = 10;
          var num3 = add(num2);
          console.log(num2);          //10
          console.log(num3);          //40,调用这个函数时,变量num2作为参数被传递给这个函数了。而这个addr()的函数的值为局部变量的值30,                        再加上传递进来的值 num2 = 10,最后num3的值为40
 
  • 引用类型的参数传递,按对象传递
          换句话说,即使这个变量是按值传递的,被传递的这个值也会按引用来访问同一个对象。也就是说,即使是在函数内部修改了参数的值,但是原始的引用仍然保持不变。
          function setName(obj){
              obj.name = 'kevin';          //obj的默认的name属性值为kevin
              obj = new Object();          //为obj重新定义一个新的对象,这个对象为局部对象
              obj.name = 'Greg';           //为这个新的局部对象定义一个不同值的name属性
          }
 
          console.log(obj.name);           //kevin,  为什么这里的值是kevin呢,这是因为,实际上,在函数内部重写obj时,这个变量的引用,其实就是一个局部对象了,这个局部对象会在函数执行完毕之后立即销毁
 
          var person = new Object();
          setName(person);
          console.log(person.name);       //kevin
 
可以把ECMAScript函数的参数想象成局部变量          
          
 
执行环境,决定了变量的生命周期,以及哪一部分代码可以访问其中的变量
 
     执行环境定义了变量或函数有权访问的其它数据,决定他们的各自行为,每个执行环境都 有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。我们编写的代码无法访问这个对象。
 
  • 全局执行环境,直到应用程序退出,如关闭网页或浏览器时才会被销毁。
 
     每个函数都有自己的执行环境。
 
     var name = 'kevin';
     function changeName(){
          if(name === 'kevin'){
               name = 'page';
          }else{
               name = 'kevin';
          }
     }
 
     changeName();
     console.log("name is now" + name);
 
  • 块级作用域,javascript没有块级作用域
    • 对于javascript中,由for 语句创建的变量 i ,即使是在for语句执行结束后,也依旧会存在于循环外部的执行环境中。
 
               for(var i = 0; i < 10; i++){
                    doSomeThing(i);
               }
               alert(i);   //10
 
  • 声明变量,在javascript中,不声明而直接给变量赋值是不可行的
    • 使用 var 声明的变量,会被自动添加到最接近的环境中;
    • 使用 with 声明的变量,最接近的环境是函数环境;
    • 初始化变量时,没有使用 var 声明,该变量会自动添加到全局环境中;
          function add(num1, num2){
  1. var sum = num1 + num2;    //声明并初始化
  2. sum = num1 + num2;        //没有声明直接初始化
               return sum;
          }
 
          var result = add(10, 20);
          console.log(sum);              
如果为1,是打印不到sum的,因为var sum为函数内部变量,函数执行完毕自动销毁;
如果为2,是可以打印到的,因为,没有被var声明,它是一个全局变量,sum不会被销毁,后面的代码依旧可以访问它。
          
 

javascript 红宝书笔记之函数、变量、参数、作用域的更多相关文章

  1. javascript 红宝书笔记之如何使用对象 如何操作数组

    对象定义  ===  引用类型,描述的是一类对象所具有的属性和方法     新对象的创建 方法     new + 构造函数       var person = new Object(); 对象字面 ...

  2. javascript 红宝书笔记之数据类型

      typeof   检测给定变量的数据类型,通过typeof来区分函数和其它对象   var message = 'some string'; console.log(typeof(message) ...

  3. javascript 红宝书笔记之操作日期

    创建当日 日期对象   调用Date的构造函数而不传递参数的情况下,新创建的对象默认获取当前的日期和时间.   var now = new Date();   创建特定的日期和时间对象   Date. ...

  4. JS红宝书笔记——第一章 JavaScript简介

    1.JavaScript简史 Netscape公司决定开发一种客户端语言用来处理浏览器端简单的表单验证. Netscape公司派布兰登·艾奇(BrendanEich)为计划于1995年2月发布的Net ...

  5. 第5章 引用类型---JS红宝书书摘系列笔记

    在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法.而对象是某个特定引用类型的实例. 一.Object类型 可以通过Object构造函数创 ...

  6. OpenGl编程指南第7版(红宝书)环境配制

    环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...

  7. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

  8. VS2015中跑OpenGL红宝书第八版的示例代码

    OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...

  9. 【转载】关于在vs2013中配置opengl红宝书第八版环境

     本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版 ...

随机推荐

  1. UVALive 5061 Lightning Energy Report --LCA

    题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0) 解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k), ...

  2. AngularJs定制样式插入到ueditor中的问题总结

    总结一下自己给编辑器定制样式的过程中所遇到的问题,主要是编辑器的二次开发接口,以及用angular定制样式,问题不少,终于在**的帮助下,完成了,还剩下老版本和新版本的交互没有弄好,不过不难.下面分别 ...

  3. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  4. POJ3255Roadblocks[次短路]

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12697   Accepted: 4491 Descr ...

  5. Java面向对象一

    一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...

  6. JProfiler

    1  前言 回答之前先让我们来看看什么是jProfiler:JProfiler是一个商业授权的Java剖析工具,由EJ技术有限公司,针对Java EE和Java SE应用程序开发的.它允许两个内存剖面 ...

  7. rqnoj28[stupid]愚蠢的宠物

    题目描述 背景 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 描述 狗狗的家因为常常遭到猫猫的攻击,所以不 ...

  8. nginx的主要用途

    1.反向代理加速(无缓存),简单的负载均衡和容错  : 问题一:为什么反向代理可以做加速服务器? 反向代理接受发给web服务器的真实请求,但与web服务器不同的是,它们可以向其他的服务器进行通信.以便 ...

  9. ajax asud模板

    <table class="table"> <tr> <th>@Html.DisplayNameFor(model=>model.Id)& ...

  10. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”

    原因:在java安装后进行环境变量配置其中 export JAVA_HOME="/opt/java/jdk1.8" export PATH=$JAVA_HOME 即结束 错误原因: ...