JavaScript函数
JavaScript函数深入讲解 / 2-1 什么是对象
JavaScript中的对象,对象是什么:
对象就是值的集合,任意值的集合。
值包括所有5种基本类型以及3种引用类型的值。
为了方便访问值,就需要给值取个名字,这个就是属性。值
和键在一起就形成了键值对。
对象就是由一个又一个的属性所构成的。
对象无法直接使用,需要将它赋值给一个变量。
对象中的函数可称为方法。方法也是属性。
尽量少使用全局变量。 若是没有对象,就只能挨个声明全局变量,变量一多,容易造成命名冲突,而且分散。
JavaScript函数深入讲解 / 2-2 如何使用对象
JavaScript函数深入讲解 / 3-2 JS中的函数
什么是函数:一次定义,n次调用。
function关键字:作用就是告诉js解析器(浏览器),这里是一个函数,必写。函数保存在内存中。
函数名:区分不同函数,通过函数名来直指函数在内存中的位置。没有名字的函数是匿名函数,有名字的叫命名函数。
参数:可以什么都不写,可以写一个或多个,用逗号分隔。js中传入的参数可以和函数所需参数不一致。
函数体:局部作用域,return 函数先结束,并返回值。
函数定义和调用时发生了什么:
定义:封装了代码,window下面多了个属性,在局部作用域销毁后,该属性,节点仍可以调用。
JavaScript函数深入讲解 / 3-3 为什么要使用函数
JavaScript函数深入讲解 / 3-4 函数的本质
var person = {}; person.name = 'xm'; person.setName = function (name) { this.name = name; } function add(num1, num2) { return num1 + num2; } add.sex = 'male'; add.setSex = function (sex) { this.sex = sex; } console.log(add.sex);//male console.log(add.setSex('female'));//undefined,函数内部只是发生了设置,没有返回值,这里输出的是返回值。 console.log(add.sex);//female console.log(add(1, 2));//3
setTimeout(function () { console.log(1); }, 1000);
setTimeout(fn, 1000); function fn() { console.log(1); }
JavaScript函数深入讲解 / 4-1 三种定义方式及区别
JavaScript函数深入讲解 / 4-8 函数定义的位置
JavaScript函数深入讲解 / 5-1 普通函数的调用
匿名函数的调用:
function(){}()由于预解析的作用,开头给声明定义为函数整体,不能自我执行。
解决:
1:(function(){})()在前面加一个括号
2:(function(){}())完全包住也是可以。
3:var name = function(){}();用变量来代替函数开头;
4:!+-~function(){}();一元运算符在前面开头;
5:console.log(function(){}())也能执行。
递归函数:调用自己的函数自我执行,达到循环递归。
JavaScript函数深入讲解 / 5-5 方法的调用
var operation = { add: function (num1, num2) { return num1 + num2; }, subtract: function (num1, num2) { return num1 - num2; } }; operation.add(1, 1); document.onclick = function () { console.log('你点击了文档!'); }; document.onclick();//手动模拟调用
var operation = { add: function (num1, num2) { return num1 + num2; }, subtract: function (num1, num2) { return num1 - num2; }, '@': function () {//非法字符串需要引号,冒号右侧除了字符串要引,其他可以不用 console.log('@'); }, key: function () { } }; console.log(operation.add(1, 2)); console.log(operation['@'](1, 2));//非法字符串传入 var key = 'add'; console.log(operation[key](1, 2));//传入变量用[]
var operation = { add: function (num1, num2) { console.log(num1 + num2); return this;//链式调用返回自身对象 }, subtract: function (num1, num2) { console.log(num1 - num2); return this; } }; operation.add(1, 2).subtract(2, 1);
JavaScript函数深入讲解 / 5-8 构造函数的调用
构造函数的调用:通过new调用。
习惯性将构造函数名大写,以便于和普通函数区分,但这不是硬性要求。
普通函数若是没有return,则执行完函数后会返回undefined。
new 构造函数();//执行完后会返回一个对象,实例化一个函数,生成一个对象。
js中常见的内置构造函数:
Object();//通过new Object()生成对象。
Array();//通过new Array()生成对象。
JavaScript函数深入讲解 / 5-12 函数的间接调用
JavaScript函数深入讲解 / 6-1 参数的类型
JavaScript函数深入讲解 / 6-2 参数的个数
参数个数:
实参个数小于形参个数:
根据预解析,未得到参数为undefined。
运用或||运算,自动判断,并赋值。
function pow(base, power) { // if (!power) power = 2; power = power || 2; return Math.pow(base, power); } console.log(pow(3)); console.log(pow(3, 3)); //$('p') //$('p', document) //$('p', document.getElementById('box'))
//实参个数大于形参个数:利用arguments类数组,arguments指代的是参数的值。arguments[0]代表第一个值,以此类推。
function add() { if (arguments.length == 0) return; var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } console.log(add()); console.log(add(1, 2, 3, 4, 5));
JavaScript函数深入讲解 / 6-5 arguments
function fn() { console.log(arguments); function fn2() { console.log(arguments); } fn2(2); } fn(1);
"use strict"; var num = 1; num = 1;//错误 var jicheng = function fn(num) { if (num <= 1) return 1; return num * fn(num - 1); }; console.log(jicheng(5)); console.log(jicheng(4));