一、函数1.1 函数定义JavaScript中的函数和Python中的非常相似,只是定义方式有点区别 。
// 普通函数定义function f1() {console.log("Hello world!");}// 带参数的函数function f2(a, b) {console.log(arguments);// 内置的arguments对象console.log(arguments.length);console.log(a, b);}// 带返回值的函数function sum(a, b){return a + b;}sum(1, 2);// 调用函数// 匿名函数方式var sum = function(a, b){return a + b;}sum(1, 2);// 立即执行函数 ==> 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱(function(a, b){return a + b;})(1, 2);补充:
ES6中允许使用“箭头”(=>)定义函数 。
var f = v => v;// 等同于var f = function(v){return v;}如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分:
var f = () => 5;// 等同于var f = function(){return 5};var sum = (num1, num2) => num1 + num2;// 等同于var sum = function(num1, num2){return num1 + num2;//这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中}1.2 函数中的arguments参数function add(a,b){console.log(a+b);console.log(arguments.length); console.log(arguments[0]);//arguments相当于将传入的参数全部包含,这里取得就是第一个元素1}add(1,2)输出:
321注意:
函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回 。
1.3 函数的全局变量和局部变量
- 局部变量
在JavaScript函数内部声明的变量(使用var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部) 。只要函数运行完毕,本地变量就会被删除 。
- 全局变量
在函数外声明的变脸就是全局变量,网页上的所有脚本和函数都能访问它 。
- 变量生存周期
- JavaScript变量的生命期从它们被声明的时间开始 。
- 局部变量会在函数运行以后被删除 。
- 全局变量会在页面关闭后被删除 。
与Python作用域关系查找一模一样!几个例子:
var city = "BeiJing"; function f() {var city = "ShangHai";function inner(){var city = "ShenZhen";console.log(city);}inner(); }f();//输出结果是ShenZhenvar city = "BeiJing"; function Bar() {console.log(city); } function f() {var city = "ShangHai";return Bar; } var ret = f();ret();// 打印结果是BeiJing// 闭包函数 var city = "BeiJing"; function f(){var city = "ShangHai";function inner(){console.log(city);}return inner; } var ret = f();ret();// 打印结果是ShangHai
词法分析的过程:
当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:
- 函数参数,如果有,则将此参数赋值给AO,且值为undefined 。如果没有,则不做任何操作 。
- 函数局部变量,如果AO上有同名的值,则不做任何操作 。如果没有,则将此变量赋值给AO,并且值为undefined 。
- 函数声明,如果AO上有,则会将AO上的对象覆盖 。如果没有,则不做任何操作 。
看两个例子:
var age = 18; function foo(){console.log(age);var age = 22;console.log(age); }foo();// 问:执行foo()之后的结果是?

文章插图
var age = 18; function foo(){console.log(age);var age = 22;console.log(age);function age(){console.log("呵呵");}console.log(age); }foo();// 执行后的结果是?

文章插图
词法分析过程:
- 分析参数,有一个参数,形成一个 AO.age=undefined;
- 分析变量声明,有一个 var age, 发现 AO 上面已经有一个 AO.age,因此不做任何处理
- 分析函数声明,有一个 function age(){...} 声明,则把原有的 age 覆盖成 AO.age=function(){...};
执行过程:
注意:
执行过程中所有的值都是从AO对象上去寻找1、执行第一个 console.log(age) 时,此时的 AO.age 是一个函数,所以第一个输出的一个函数;
2、这句 var age=22; 是对 AO.age 的属性赋值,此时AO.age=22,所以在第二个输出的是 22;
3、同理第三个输出的还是22, 因为中间再没有改变age值的语句了;
三、内置对象和方法JavaScript中的所有事物都是对象:字符串、数字、数组、日期等等 。在JavaScript中,对象是拥有属性和方法的数据 。
之前在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象、String对象、Array对象等 。
注意
var s1 = "abc"和var s2 = new String("abc")的区别:typeof s1 --> string 而 typeof s2 --> Object
文章插图
3.1 自定义对象JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键 。
var a = {"name": "Alex", "age": 18};console.log(a.name);console.log(a["age"]);遍历对象中的内容:var a = {"name": "Alex", "age": 18};for (var i in a){console.log(i, a[i]);}但事情并没有那么简单……创建对象:
var person=new Object();// 创建一个person对象person.name="Alex";// person对象的name属性person.age=18;// person对象的age属性注意:- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
