JavaScript高级-1

1.JavaScript 函数

函数就是完成某一具体功能的代码块

使用关键字function定义函数

函数声明后不会立马执行,会在我们需要时调用,

因为函数声明后不会立马执行,所以不以分号结束

       语法格式:

        function test1(参数列表) {

            要执行的代码

        }

 使用关键字function定义函数

        function test2() {
            alert("关键字function定义");
        }
        alert(test2());

1.1函数表达式

JavaScript 函数可以通过一个表达式定义。

函数表达式可以存储在变量中

函数存储在变量名中, 不需要函数名称、 通常用变量名称调取

        var test3 =
            //匿名函数
            function() {
                return "beijing";
            };
        alert(test3); //输出函数本身
        alert(test3()); //输出返回值北京

1.2Function() 构造函数

创建函数的方式1:

使用关键字 function 定义函数

        // 有参数
        function test4(name, age) {
            return name + "," + age;
        }
        alert(test4); //输出函数本身
        alert(test4("wangxiao", 20)); //输出返回值

创建函数的方式2:

通过内置的 JavaScript 函数构造器(Function())定义

        var test5 = new Function("return'hello';");
        alert(test5());
        var test6 = new Function("name", "age", "return name+','+age;");
        alert(test6("wangxiao", 20));

实际上,不必使用构造函数

1.3函数提升(Hoisting)

函数提升(Hoisting)--- 先用后定义声明

提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。

提升(Hoisting)应用在变量的声明与函数的声明。

使用表达式定义函数时无法提升

因此,函数可以在声明之前调用:

        //    后定义
        var res1 = test7("dada", 23);
        alert(res1);
        // 先用
        function test7(name, age) {
            return name + "," + age;
        }

1.4自调用函数

自调用表达式会自动调用。

如果表达式后面紧跟 () ,则会自动调用。

不能自调用声明的函数。

通过添加括号,来说明它是一个函数表达式

        // 添加括号,来说明它是一个函数表达式
        (function fun1() {
            alert("自调用函数")
        })(); //表达式后面紧跟 () ,则会自动调用

1.5函数可作为一个值使用

        // 函数可作为一个值使用
        function fun2(x, y) {
            return x * y;
        }
        var z = fun2(3, 7);
        alert(z);

1.6函数是对象

JavaScript 中的 typeof 运算符会为函数返回 "function"。

但是最好是把 JavaScript 函数描述为对象。

函数都有属性和方法

arguments.length 属性返回函数被调用时收到的参数数目

toString() 方法将函数作为一个字符串返回

        function myFun(a, b, c) {
            return arguments.length; //属性返回函数调用过程接收到的参数个数
        }
        alert(myFun(1, 20, 10));//参数为3
        alert(myFun.toString()); //方法将函数作为一个字符串返回

2.JavaScript 函数参数

显式参数(parameter)指的是在函数定义中列出的名称

隐式参数(argument)指的是传递到函数或由函数接收到的真实

函数显式参数在函数定义时列出。

函数隐式参数在函数调用时传递给函数真正的值

参数规则

JavaScript 函数定义显式参数时没有指定数据类型。

JavaScript 函数对隐式参数没有进行类型检测。

JavaScript 函数对隐式参数的个数没有进行检测。

显式参数(parameter)

指的是在函数定义中列出的名称

        function test1(name, age) {
            return name + "," + age;
        }
        // name,age--显式参数

 隐式参数(argument)

arguments 是JavaScript 中内置对象--是一个数组--保存参数值

        function test2() {
            return arguments[0] + "," + arguments[1]; //数组
        }
        alert(test2("wangxiao", 20));

通过值传递参数

在函数中调用的参数是函数的隐式参数。

JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。

如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。

隐式参数的改变在函数外是不可见的。

通过对象传递参数

在JavaScript中,可以引用对象的值。

因此我们在函数内部修改对象的属性就会修改其初始的值。

修改对象属性可作用于函数外部(全局变量)。

修改对象属性在函数外是可见的。

        function test3(name, age) {
            return name + "," + age;
        }
        //"lisi",24---参数的具体值【值传递】
        //var  res1=test3("lisi",24);
        var canshu1 = "王五"; //类型string
        var canshu2 = 25; //类型number
        alert(canshu1.charAt(0)); //canshu1变量就是对象
        //canshu1,canshu2---参数是变量--对象【对象传递】
        var res1 = test3(canshu1, canshu2);
        //alert(res1);

3.JavaScript 函数调用

JavaScript 函数有 4 种调用方式

3.1作为一个函数调用

        function test1(x, y) {
            return x * y;
        }
        var test2 = test1(10, 100);
        alert(test2);
        var test2 = window.test1(10, 100);
        alert(test2);

以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。

在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。

在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数

 this 关键词

在 JavaScript 中,被称为 this 的事物,指的是“拥有”当前代码的对象。

this 的值,在函数中使用时,是“拥有”该函数的对象。

请注意 this 并不是变量。它属于关键词。您无法改变 this 的值

3.2函数作为方法调用

在 JavaScript 中可以将函数定义为对象的方法

        var obj1 = { //在对象中{}
            // 属性
            shuxing1: "wangxiao",
            shuxing2: "30",
            //方法
            fangfa1: function() {
                return this.shuxing1 + "," + this.shuxing2; //this表示在当前对象
            }
        }
        var test3 = obj1.fangfa1();
        alert(test3);

函数作为对象方法调用,会使得 this 的值成为对象本身

3.3使用构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数

这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象.

构造器调用会创建新对象。新对象会从其构造器继承属性和方法

        function fun1(x, y) {
            this.numx = x;
            this.numy = y;
        }
        // 新的对象会从函数中继承属性和方法
        var res2 = new fun1(10, 100); //创建一个构造函数-新对象(new)
        alert(res2); //object对象
        alert(res2.numx); //10
        alert(res2.numy); //100

3.4通过javascript的内置函数调用函数

call() 和 apply() 是预定义的函数方法

call()

        function test1(x, y) {
            return x * y;
        }
        var mytest1
        mytest1 = test1.call(mytest1, 10, 100);
        alert(mytest1); //1000

apply() 

        function test2(x, y) {
            return x * y;
        }
        var mytest2, num1;
        num1 = [10, 5];
        mytest2 = test2.apply(mytest2, num1);
        alert(mytest2); //50

 call() 和 apply()内置函数的区别

 call() 和 apply()都可以访问自定义函数

 两个方法都使用了对象本身[this]作为第一个参数。 

两者的区别在于第二个参数: 

call()的第二个参数开始是当前函数的具体所需的参数值

 apply()的第二个参数传入的是一个参数数组,也就是将当前函数的具体所需的参数值组合成为一个数组传入

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值