博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS函数
阅读量:6325 次
发布时间:2019-06-22

本文共 2627 字,大约阅读时间需要 8 分钟。

1、定义函数

使用function关键字来定义函数,分为两种形式:

  • 声明式函数定义;
function add(m,n) {    alert(m+n); }

这种方式等同于构造一个Function类的实例的方式:

var add = new Function("m", "n", "alert(m+n);");

Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:"m","n"。

  • 函数表达式;
//将一个匿名函数赋值给变量addvar add = function(m, n) {    alert(m + n);};add(1, 2);//3//函数表达式作为参数传递给其他函数var arr = [1, 3, 4, 2];arr = arr.sort(function(a, b) {    return a - b;});alert(arr);//1,2,3,4//定义后立即调用alert( function(m, n) {    return m + n;}(1, 2));//函数表达式也可以定义名称(如用于递归)var f=function fact(x){    if(x<1) {        return 1;    }else{        return x*fact(x-1);    }};

 

2、声明式函数定义和函数表达式的一点区别

    声明式函数定义语句属于顶级作用域范围,函数调用语句可写在函数声明语句之前:

add(1, 2);//3function add(m, n) {    alert(m + n);}

   函数表达式定义的函数在定义之前无法调用:

//TypeError: add is not a functionadd(1, 2);var add = function(m, n) {    alert(m + n);};

 

3、函数的返回值

    Javascript中的函数不需要声明返回类型,使用return关键字返回一个值。若函数不包含return语句,或者直接使用"return;",则函数的返回值为undefined。

4、嵌套函数

    函数可以嵌套在其他的函数里面,内层函数可以访问外层函数的参数和变量:

function add(m, n) {    function d(x) {        return x * 2;    }    return d(m) + d(n);}alert(add(1, 2));//6

 

5、调用函数

 

    函数体代码在函数被调用时才会执行。Javascript函数有4中调用方式:

  • 普通的函数调用
  • 方法调用
  • 构造函数调用
  • 通过 call() 和 apply() 间接调用

 5.1 普通的函数调用

    最常用的函数调用方式,如:

alert("hello");var result = add(1, 2);

5.2 方法调用

      所谓方法就是将一个函数赋给一个对象的属性:

//定义一个函数function hello(name) {    alert('hello,' + name);};var user = {};//赋值给user的sayHi属性user.sayHi = hello;//方法调用user.sayHi('张三');

      普通的函数调用和方法调用的一个区别:在"普通的函数调用"方式中,函数的调用上下文(this的值),为全局对象(非严格模式)或者undefined(严格模式)。而在"方法调用"方式中,this指向当前对象。利用这一特性,我们可以在方法不需要明确的返回值时,直接返回this,从而实现"方法链"。如jquery中常见的:

 

$('#btn_edit').css({color:red}).show();

     嵌套函数中的this:嵌套函数中,内层函数不会继承外层函数的this,即当内层函数作为方法调用时,内层函数的this指向当前调用对象;当内层函数作为函数调用时,this的值为全局对象(非严格模式)或者undefined(严格模式)。怎样在内层函数中访问外层函数的this呢?通常将this保存在一个局部变量中,通过变量来访问:

var obj = {    f : function() {        var self = this;        console.log(this === obj);//true,this指向当前对象        f1();        function f1() {            console.log(this === obj);//false,this为全局对象或者undefined            console.log(self === obj);//true,self指向外层this,即当前对象        }    }};

 

 

5.3 构造函数调用

当使用new关键字创建一个对象时,即调用了构造函数。构造函数若没有形参,可以省略圆括号:

var obj = new Object();//等价于var obj = new Object;

调用构造函数,创建了一个新对象,这个新对象会成为该构造函数的调用上下文(this的值):

function User(name) {    this.name=name;    console.debug(this);}var user = new User('张三');

 

5.4 call() 和 apply() 间接调用

    Javascript中函数也是对象,也拥有方法。其中 call() 和 apply() 可以用来间接调用函数。call() 的第一个参数用来指定调用上下文(即this的值),后面的参数是传入调用函数的实参。

var name = 'A';var user = {    name : 'B'};function showName() {    alert(this.name);}showName();//A,this为全局对象showName.call(user);//B,this为user对象

  apply() 和 call() 类似,区别在于,后面的实参需要以数组的形式传递(可将当前函数的arguments数组直接传入)。

 

转载地址:http://ksgaa.baihongyu.com/

你可能感兴趣的文章
HiKey连接
查看>>
wget 参数大全
查看>>
使用Loadrunner进行文件的上传和下载
查看>>
Linux C 静态库(.a) 与 动态库(.so) 的详解
查看>>
JS函数
查看>>
sql语句分组/排序/计算总数/连接等sql语句书写
查看>>
MVC5 的MicrosoftOwinSecurity扩展插件——微信,QQ登录第三方源码
查看>>
分布式系统理论基础 - CAP
查看>>
mysql 用户管理和权限设置
查看>>
【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目
查看>>
[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
查看>>
Numpy 的ndarray
查看>>
牛人博客 列表
查看>>
数据库连接池dataesoruce pool深入理解
查看>>
vuejs2.0使用Sortable.js实现的拖拽功能
查看>>
oracle多实例的启动与关闭
查看>>
码农生涯杂记_4
查看>>
利用jQuery设计横/纵向菜单
查看>>
unity游戏开发之NGUI的UISprite染色
查看>>
HDOJ find the safest road 1596【最短路变形】
查看>>