函数详谈笔记

函数的声明
1、function命令
带方法名的函数
2、函数表达式
var print = function(){}
将匿名函数赋值给变量
3、Function构造函数
var add = new Function(‘x’,‘y’,‘x+y’);最后一个参数是方法体,其余的都是参数
等同于function add (x,y){
return x+y;}

如果一个函数被重复声明,后面的函数会覆盖前面的函数

圆括号运算符

函数的提升,会将函数的定义提升到加载js页面的时候,如果页面里有赋值语句声明的函数,以赋值语句声明的函数为准
函数的名称和参数个数
function f(x,y){}
f.name //f
f.length //2
函数toString
会将函数全部内容打印出来
function f(x,y){}
console.log(f.name);
console.log(f.length)
console.log(f.toString())

var 在函数内部有效 在其余地方都是全局变量 在函数内部也会被提升

参数
参数的省略 会省略后面的参数,解析为undefined
参数的传递 函数体外定义参数(数值、布尔、字符串) 在函数体内使用后 不影响函数体外的参数值
如果是对象,在函数内修改对象的部分属性,会影响函数外定义的对象的属性值
如果修改整个对象的值,那么不会影响函数外部对象的值
同名参数,取后一个
arguments包含了函数运行时的所有参数,正常模式下,可以使用arguments修改参数值,使用arguments.length可以知道具体传进来几个参数
arguments是一个对象,并不是一个数组
将arguments转为数组
var arg = Array.prototype.slice.call(arguments);
prototype运行向Array()中添加新的属性和方法
slice截取数组的开始位置和结束位置,开始位置为必填,结束位置可以填可以不填,如果结束位置超过数组长度或者不是数字,那么截取到数组的长度位置
call编写能够在不同对象上使用的方法,调用所有者对象作为参数的方法

函数闭包
子级可以一级一级向上找父级,而父级不可以去找子级

function Person(name) {
var _age;
function setAge(n) {
_age = n;
}
function getAge() {
return _age;
}

return {
name: name,
getAge: getAge,
setAge: setAge
};
}

var p1 = Person(‘张三’);
p1.setAge(25);
p1.getAge() // 25

闭包会保留外层函数的内部变量,消耗很大。不要滥用闭包,会造成网页性能问题。
立即调用的函数表达式(IIFE)
(function(){})();函数定义后立即被执行,一般使用在匿名函数中,避免起名字污染全局变量

eval命令:接受一个字符串作为参数,并将这个字符串当作语句执行起来,如果参数字符串无法当作语句执行,则会报错;如果不是字符串,会原样返回。eval没有作用域,因此会修改全局变量,造成不安全因素,因此尽量避免使用。最常见的使用场景为解析json,但正常应该使用JSON.parse方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值