JavaScript函数使用要点

来源:互联网 发布:仿小米商城源码 编辑:程序博客网 时间:2024/06/01 21:04

JavaScript函数使用要点

arguments对象

arguments对象与数组类似,可以使用方括号语法访问

function doAdd() {  if (arguments.length == 1) {    console.log(arguments[0]);  } else if (arguments.length == 2) {    console.log(arguments[0] + arguments[1]);  }}doAdd(10);//10doAdd(10, 20);//30

arguments对象的值与命名参数同步

function doAdd(num1, num2) {  arguments[1] = 10;  console.log(arguments[0] + num2);}doAdd(6, 7);//16

arguments.callee和function.caller

arguments.callee指向当前函数

function.caller为调用当前函数的函数的引用

function outer(){  inner();}function inner(){  console.log(arguments.callee.caller);}outer();//[function: outer]

没有重载

同名函数只有最后一个生效

function addSomeNumber(num) {  return num + 100;}function addSomeNumber(num1, num2) {  return num1 + 200;}console.log(addSomeNumber(100)); //300console.log(addSomeNumber(100, 200)); //300

Function类型


函数声明与函数表达式

函数声明

function sum(num1, num2) {  return num1 + num2;}

函数表达式

var sum = function(num1, num2) {  return num1 + num2;}

函数声明可以在代码执行时提升到顶部,而函数表达式这样用会报错

console.log(sum(1, 2));//3function sum(num1, num2) {  return num1 + num2;}

访问函数指针与函数调用

函数名为指向函数体的指针,函数名后加上括号可调用函数

function sum(num1, num2) {  return num1 + num2;}console.log(sum(1, 2));//3var anotherSum = sum;console.log(anotherSum(1, 2));//3sum = null;console.log(anotherSum(1, 2));//3

函数作为参数

函数可以作为参数来传递

例:json数组排序

function createComparisonFunction(propertyName) {//接收属性名  return function(object1, object2) {    var value1 = object1[propertyName];    var value2 = object2[propertyName];    //制定比较规则    if (value1 < value2) {      return -1;    } else if (value1 > value2) {      return 1;    } else {      return 0;    }  }}//测试var array = [{  'name': '小明',  'value': 3}, {  'name': '小红',  'value': 1}, {  'name': '小宝',  'value': 2}, {  'name': '小刚',  'value': 0}];array.sort(createComparisonFunction("value"));console.log(array);// [ { name: '小刚', value: 0 },//   { name: '小红', value: 1 },//   { name: '小宝', value: 2 },//   { name: '小明', value: 3 } ]

apply()和call()

语法:

apply(作用域,参数数组);

call(作用域,参数1,参数2,…);

这两个函数能够扩充函数赖以运行的作用域

color = "red";var o = {  color: "blue"};function sayColor() {  console.log(this.color);}sayColor();//redsayColor.call(o);//blue

作用域


没有块级作用域

for (var i = 0; i < 10; i++) {  //doSomething}console.log(i); //10

函数环境

使用var声明的变量会自动添加到最近的环境中,函数内部声明的变量在外界无法直接访问

function add(num1, num2) {  var sum = num1 + num2;  return sum;}var result = add(10, 20);//30console.log(result);console.log(sum);//报错

函数表达式


递归

使用arguments.callee实现递归

function factorial(num) {  if (num <= 1) {    return 1;  } else {    return num * arguments.callee(num - 1);  }}console.log(factorial(4));//24
阅读全文
0 0
原创粉丝点击