发表于: 2020-09-06 22:18:54

1 2031


今天完成的事情:

1.回顾知识点


明天计划的事情:

1.回顾知识点


遇到的问题和收获


创建函数的几种方式

1、声明函数

最普通最标准的声明函数方法,包括函数名及函数体。

function fn1(){}

2、创建匿名函数表达式

创建一个变量,这个变量的内容为一个函数

var fn1=function (){}

注意采用这种方法创建的函数为匿名函数,即没有函数name

var fn1=function (){};
getFunctionName(fn1).length;//0

3、创建具名函数表达式

创建一个变量,内容为一个带有名称的函数

var fn1=function xxcanghai(){};

注意:具名函数表达式的函数名只能在创建函数内部使用

即采用此种方法创建的函数在函数外层只能使用fn1不能使用xxcanghai的函数名。xxcanghai的命名只能在创建的函数内部使用

测试:

var fn1=function xxcanghai(){
   console.log("in:fn1<",typeof fn1,">xxcanghai:<",typeof xxcanghai,">");
};
console.log("out:fn1<",typeof fn1,">xxcanghai:<",typeof xxcanghai,">");
fn1();
//out:fn1< function >xxcanghai:< undefined >
//in:fn1< function >xxcanghai:< function >

可以看到在函数外部(out)无法使用xxcanghai的函数名,为undefined。

注意:在对象内定义函数如var o={ fn : function (){…} },也属于函数表达式

4、Function构造函数

可以给 Function 构造函数传一个函数字符串,返回包含这个字符串命令的函数,此种方法创建的是匿名函数。

5、自执行函数

(function(){alert(1);})();
(function fn1(){alert(1);})();

自执行函数属于上述的“函数表达式”,规则相同

6、其他创建函数的方法


浅拷贝、深拷贝分别是什么?

深拷贝的特征:创建一个新的对象,新的对象是旧对象的复制。新的对象和旧的对象没有关联。

浅拷贝的特征:创建一个新的对象,新的对象是旧的对象。更改其中任意一个对象,另一个都会更改。

浅拷贝的常用方法:

1.赋值

JS数组的浅拷贝

简单的赋值就是浅拷贝。因为对象和数组在赋值的时候都是引用传递。赋值的时候只是传递一个指针。

var a = [1,2,3];

var b = a;

b[0]='a';

console.log (a,b) //['a',2,3] ['a',2,3]

2.Object.assign()

定义:用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象.

深度拷贝常用方法:

1.转成JSON再转回来

  Json方法深复制的缺点:Json的方法只能用于引用类型中的Number, String, Boolean, Array, 扁平对象, 对于像function这种对象无法复制

2.concat方法

3.slice(): 语法:arrayObject.slice(start,end) slice() 方法可从已有的数组中返回选定的元素(请注意,该方法并不会修改数组,而是返回一个子数组)。



返回列表 返回列表
评论

    分享到