发表于: 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() 方法可从已有的数组中返回选定的元素(请注意,该方法并不会修改数组,而是返回一个子数组)。
评论