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 红宝书第4版上市啦!「文末送几本给大家」

    文末有活动 人的一生中总要读几本经典书,在这个"经典"泛滥的年代,什么才是权威的代表,我想大概是一本的书的口碑,能积累下上佳口碑的书,往往也是能经得住时间推敲的.比如这本: 我相信 ...

  3. 一起读JavaScript红宝书 —— 02语法基础(上)

    JavaScript高级程序设计读书笔记,前端神作不容错过.原书近100万字,内容太多,故作笔记尽量在不缩减内容的情况下缩减字数,方便复习和回顾. 语法基础(上) 1. 语法 2. 关键字和保留字 3 ...

  4. 一起读JavaScript红宝书 —— 01JavaScript概述

    JavaScript高级程序设计读书笔记,前端神作不容错过.原书近100万字,内容太多,故作笔记尽量在不缩减内容的情况下缩减字数,方便复习和回顾. JavaScript概述 1. JavaScript ...

  5. JavaScript 红宝书学习记录

    函数 什么是函数? function,也叫 方法(method)或过程procedure.是一段 预定义 好的,并且可以被 反复执行的 代码块: 预定义:提前声明好,不是马上使用. 反复执行:可以被循 ...

  6. 【红宝书笔记精简版】第十二章 BOM

    目录 12.1 window 对象 12.1.1 Global 作用域 12.1.2 窗口关系 12.1.3 窗口位置与像素比 12.1.4 窗口大小 12.1.5 视口位置 12.1.6 导航与打开 ...

  7. 【红宝书笔记精简版】 第二十四章 网络请求与远程资源

    目录 24.1 XMLHttpRequest 对象 24.1.1 使用 XHR 24.1.2 HTTP 头部 24.1.3 GET 请求 24.1.4 POST 请求 24.1.5 XMLHttpRe ...

  8. 红宝书笔记《第7版》

    1.openGl是一个状态机 2.福特汽车生产装配图 3.缩写: GLU openGL工具函数库 GLUT openGlshi实用工具库 general-purpose computing on gr ...

  9. javascript 高级程序设计_JavaScript 经典「红宝书」,几代前端人的入门选择

    人的一生中总要读几本经典书,在这个"经典"泛滥的年代,什么才是权威的代表,我想大概是一本的书的口碑,能积累下上佳口碑的书,往往也是能经得住时间推敲的.比如这本: 相信许多前端开发者 ...

最新文章

  1. kettle分批处理大表数据_kettle-批量同步表数据
  2. 为什么CSS使用假元素?
  3. JZOJ 5354. 【NOIP2017提高A组模拟9.9】导弹拦截
  4. 【Linux】一步一步学Linux——pidof命令(122)
  5. java新闻分页_新闻实现分页显示
  6. python anylogic_分享 | IE工具与仿真软件学习分享会
  7. php随机获取一行文本,一行PHP随机字符串生成器?
  8. 购物车的功能——JS源码
  9. linux rt 应用程序,RTlinux编程
  10. windows10怎么锁定计算机,别让Windows 10锁住亲友
  11. An Implemention of Realtime Gobal Illumination
  12. MySQL IFNULL函数
  13. python根据字符串实例化对象_解密 Python 中的对象模型
  14. 支持傲腾技术的服务器主板,华硕200系主板安装英特尔傲腾内存教程
  15. C/C++大数运算库介绍及安装
  16. MapReduce 基础案例 之 平均值 计算
  17. python 经典图书排行榜_书榜 | 计算机书籍(9.2-9.8)销售排行榜
  18. 前端微信支付代码(公众号支付)
  19. OpenAI Whisper中文语音识别效果尝试和应用(一)
  20. U-Mail邮件网关智能DNS技术,解决海外邮件接收问题

热门文章

  1. 死猪脑”能复活吗?---评美国耶鲁大学医学院实验研究
  2. 干货分享:自动驾驶核心技术进展之车用毫米波雷达
  3. 后浪优秀!21 岁小伙兼职程序员养家,大三存款达 6 位数
  4. 46 岁美国华裔“鞋王”意外去世,25 岁创业成亿万富翁
  5. 技术人的不惑之路...... | 每日趣闻
  6. HashFlare矿池退出BTC挖矿,Coingeek矿池继续增加BCH算力
  7. centos 7防火墙
  8. 027 跨站脚本攻击
  9. select sum也会返回null值
  10. 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯