JavaScript中的对象和函数

195 阅读6分钟

一、对象 1.1对象的概述

对象(object)是大括号定义的无序的数据集合,由键值对构成,键与值之间用冒号分隔,如果对象内部包含多个键值对,每个键值对之间用逗号分隔,最后一个键值对末尾不用加逗号。大括号末尾要使用分号表示对象定义结束。

对象是JavaScript的核心概念,也是最重要的数据类型。JavaScript的所有数据都可以被视为对象。此外,JavaScript 允许自定义对象。

var obj = { key : value }; 上面代码定义了一个对象,它被赋值给变量obj。key是“键名”,value是“键值”。

1.2健名

键名也被称为属性(property),对象的所有属性都是字符串,所以加不加引号都可以。但是,如果属性不符合标识符的条件(比如第一个字符为数字,或者含有空格或运算符),则必须加上引号。

var obj = {
    '1p': "Hello World",
    'h w': "Hello World",
    'p+q': "Hello World"
};

上面对象的三个属性,都不符合标识名的条件,所以必须加上引号。 检查对象是否包含一个属性 'key' in obj 1.2对象属性的操作 1.检查的是键名,不是键值。如果包含就返回true,否则返回false。

var girlFriend = {
    girlName:"迪丽热巴",
    age:18
};
console.log("age" in girlFriend);//true
console.log("height" in girlFriend);//false

1.3对象的引用

如果不同的变量名指向同一个对象,那么它们都称为这个对象的引用。

也就是说这些变量共同指向同一个内存地址,修改其中一个变量所指向的值,都会影响到其他所有变量所指向的值。

var obj = { fire : 'burn' };
var people1_fire = obj;
var people2_fire = obj;	

obj.fire = '灭了';
console.log(people1_fire.fire);//灭了
console.log(people2_fire.fire);//灭了

二、函数 2.1函数的概述

官方:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

个人:函数是一组拥有某些特定功能的、能够被重复调用的、闭合代码块 image.png 上图中【做包子的机器】就可以被看做是一个函数。

有某些特定功能的:能包包子

能够被重复调用的:机器能使用多次

闭合:机器在外面看不到里面有什么

我们在函数外部并不关心函数里面有什么,只关心函数能做什么。(使用机器能够得到包子)

函数的意义:在出现大量程序相同的时候,可以封装为一个function,这样只用调用一次,就能执行很多语句。

2.2函数的声明

function命令法
    function 函数名(参数1,参数2,…){
函数体
}

定义一个函数,用关键字function来定义,function就是英语“功能”的意思。表示这里面定义的语句,完成了一些功能。function后面有一个空格,后面就是函数名字,函数的名字也是关键字,命名规范和变量命名是一样的。名字后面有一对儿圆括号,里面放置参数,我们一会儿介绍。然后就是大括号,大括号里面是函数的语句。

函数如果不调用,那么里面的语句就一辈子不会执行,不调用就等于白写。

function hello(){
      console.log("hello");
}

2.3函数表达式法

var 变量名 = function(参数1,参数2,…){ 函数体 }; 这种声明函数的方式没有函数名,而是用变量来指代函数。调用函数的时候通过访问变量名来调用函数。

var hello = function(){
    console.log("hello");
};

相较于函数声明的多种多样,函数的调用方式就简单很多。通常情况下只要函数已经被声明,直接写出函数名和函数参数即可调用函数。

函数名();

一旦调用了函数,函数内部的语句就会执行。能够感觉到,函数是一些语句的集合,让语句成为一个军团,集体作战。要不出动都不出动,要出动就全出动。得到调用才出动。

   function fun1(){
       console.log(10);
    }

function fun1(){ console.log(20); } fun1(); 很显然通过调用能够看到,多次重复声明同名的函数会造成的结果就是:后声明的函数会覆盖先声明的函数。

对于javascript来说,把函数调用写在函数声明之前也是被允许的,因为javascript存在一个隐式的函数提升。

JS在执行前,会有一个预解析的过程,把所有的函数声明,都提升到了最最开头,然后再执行第一行语句。

所以,function定义在哪里,都不重要,程序总能找到这个函数。

fun1();
function fun1(){
    console.log(10);
}

函数声明会被提升,但是函数表达式却不会被提升

fun();
var fun = function(){   //函数表达式,而不是function定义法
alert("我是函数,我执行了!");
}

2.4函数的类型

2.4.1从定义角度分

内置函数:就是指JS自带的函数,如alert、prompt、parseInt等 用户自定义函数:就是用户根据实际情况自己定义的函数 2.4.2从参数角度分

无参数、有参数

2.4.3从返回值角度分

无返回值函数、有返回值函数

2.4.4其他

回调函数、匿名函数、自执行函数

2.5函数的参数

定义在函数内部的语句,都是相同的,但是实际上我们可以通过“参数”这个东西,来让语句有差别。

定义函数的时候,内部语句可能有一些悬而未决的量,就是变量,这些变量,我们要求在定义的时候都罗列在小括号中:

function fun(a){
console.log("我第" + a + "次说爱你");
}

调用的时候,要把这个变量的真实的值,一起写在括号里,这样随着函数的调用,这个值也传给了a:

fun(88);

● 在function里面直接用var声明的变量,叫做局部变量,只在function里面有定义,出了function没有定义的。

● 定义在全局范围内的,没写在任何function里面的,叫做全局变量,都认识。

2.63不写var就自动成为全局变量

function fn(){
	a = 1;		//这个a第一次赋值的时候,并没有var过,
				//所以就自动的在全局的范围帮你var了一次
}

fn();
console.log(a);

这是JS的一个机理,如果遇见了一个标识符,从来没有var过,并且还赋值了:

absdf = 123; 那么就会自动帮你在全局范围内定义var absdf;

告诉我们一个道理,变量要老老实实写var。

2.6.4函数的参数,会默认定义为这个函数的局部变量

function fn(a,b,c,d){

}

a,b,c,d就是一个fn内部的局部变量,出了fn就没有定义。

function fun(a){
    console.log(a);
}
fun(10);
console.log(a)