JavaScript高级-----8.函数进阶(2)

3. 严格模式

3.1 概述

3.2 开启严格模式

1. 为脚本开启严格模式

(1)

(2)

<body>
    <!-- 为整个脚本(script标签)开启严格模式 -->
    <!-- (1) -->
    <script>
        'use strict'; //单引号双引号都可以
        //   下面的js 代码就会按照严格模式执行代码
    </script>

    <!-- (2) -->
    <script>
        (function() {
            'use strict';
        })();
    </script>
</body>

2. 为函数开启严格模式

<body>
    <!-- 为某个函数开启严格模式 -->
    <script>
        // 此时只是给fn函数开启严格模式
        function fn() {
            'use strict';
            // 下面的代码按照严格模式执行
        }

     <!-- 两个函数之外的代码依然还是正常模式 -->   

        function fun() {
            // 里面的还是按照普通模式执行
        }
    </script>
</body>

3.4 严格模式中的变化

<script>
    'use strict';
    // 1. 我们的变量名必须先声明再使用
    // num = 10;
    // console.log(num);//报错

    // 2.我们不能随意删除已经声明好的变量
    var num = 10;
    // delete num;//报错
</script>

<script>
    'use strict';
    // 3. 严格模式下全局作用域中函数中的 this 是 undefined。不在是window
    function fn() {
        console.log(this); // undefined。

    }
    fn();

    // 4. 严格模式下,如果 构造函数不加new调用, this 指向的是undefined 如果给他赋值则 会报错.
    function Star() {
        this.sex = '男';
    }
    // Star(); //严格模式下这样调用构造函数会报错,正常模式下不会
    // console.log(window.sex); //严格模式下会报错,正常模式下打印: 男

    //实例化后,构造函数中的this依然指向实例对象(与正常模式一样)
    var ldh = new Star();
    console.log(ldh.sex); //男

    // 5. 定时器 this 还是指向 window (与正常模式一样)
    setTimeout(function() {
        console.log(this);
    }, 2000);
</script>

<script>
    'use strict';
    // 6. 严格模式下函数里面的参数不允许有重名
    function fn(a, a) {
        console.log(a + a);

    };
    // fn(1, 2);//严格模式下报错,正常模式下打印4
</script>

对于第2点:就是不要在if或者for等花括号{}中声明函数

更多格式要求参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

4. 高阶函数


先讨论第一种:高阶函数- 函数可以作为参数传递;第二种作为返回值留在闭包中讨论

<style>
    div {
        position: absolute;
        width: 100px;
        height: 100px;
        background-color: pink;
    }
</style>
<body>
    <div></div>
    <script>
        // 高阶函数- 函数可以作为参数传递
        function fn(a, b, callback) {
            console.log(a + b);
            callback && callback();
        }
        fn(1, 2, function() {
            console.log('我是最后调用的');

        });
        // 运用
        $("div").animate({left: 500}, function() {
            $("div").css("backgroundColor", "purple");
        })
    </script>
</body>

6. 闭包

7. 递归

原文地址:https://www.cnblogs.com/deer-cen/p/12395174.html

时间: 2024-09-30 16:48:23

JavaScript高级-----8.函数进阶(2)的相关文章

1、JavaScript高级之函数作用域链

作用域链: JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了作用域链,如图: 作用域链就是从里到外的AO链 变量的寻找: 函数fn3中使用的变量,如在fn3作用域内寻找不到,则往外层fn2作用域寻找,以此类推,直到全局对象window 代码演示: var c = 5; function t1(){ var d = 6; function t2(){ var e = 7; var d = 3;//如果

带你学习Javascript中的函数进阶(一)

1. 函数的定义和调用 1.1 函数的定义方式 函数声明方式function关键字(命名函数) 函数表达式(匿名函数) new Function() var fn = new Function('参数1', '参数2',...,'函数体') Function里面参数都必须是字符串格式 第三种方式执行效率低,也不方便书写,用的比较少 所有函数都是Function的实例(对象) //函数声明方式 function fn() {} //函数表达式(匿名函数) var fn = function() {

Javascript高级程序设计——函数内部属性与函数属性

函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数.而this据以引用的是函数执行环境对象. function fib(n){ if(n = 1){ return 1; }else{ return n * arguments.callee(n - 1); } } //这里利用函数内arguments的callees属

JavaScript高级程序设计: 函数表达式

闭包 闭包是指有权访问另一个函数函数作用域中的变量(内部变量)的函数. function createComparsionFunction( propertyName ){ return function( object1 , object2 ){ var value1 = object1[ propertyName ]; var value2 = object2[ propertyName ]; if( value1 < value2 ){ return -1; } else if( valu

javascript高级知识点——函数的长度

代码信息来自于http://ejohn.org/apps/learn/. 函数的长度属性如何工作? function makeNinja(name){} function makeSamurai(name, rank){} console.log( makeNinja.length == 1, "只定义了一个形参" ); console.log( makeSamurai.length == 2, "定义了两个形参" ); 很清楚,函数的长度就是定义形参的个数. 我们

javascript高级知识点——函数原型

代码信息来自于http://ejohn.org/apps/learn/. 向函数的原型中添加方法 function Ninja(){} Ninja.prototype.swingSword = function(){ return true; }; var ninjaB = new Ninja(); console.log( ninjaB.swingSword(), "Method exists and is callable." ); 通过实例化对象可以访问,因为构造函数实例化的对象

js_高级_函数进阶

1.函数的知识点 a.函数声明:function .函数表达式.new Function(这种方式几乎不用,不过通过这种方式我们认识到了函数也是对象) ---function 定义的有名函数的变量声明和赋值都提前但是函数表达式的只会提升变量声明(和普通变量声明提前是一样)      c.函数传参:基本类型作为参数.复杂类型作为参数---改变行参对实参是否有影响的问题 d.函数返回值:有返回值.无返回值时返回值默认是undefined.返回值时复杂类型时(比如返回值时函数.对象) b.函数调用:函

JavaScript高级程序设计之函数

函数实际上是对象,每个函数都是Function类型的实例. 函数是引用类型. 函数名实际上是一个指向函数对象的指针,不会与某个函数绑定. // 这种写法更能表达函数的本质 var sum = function(num1, num2) { return num1 + num2; }; var anotherSum = sum; sum = null; console.log(anotherSum(10, 20)); // 30 console.log(sum(10, 20)); // typeer

JavaScript高级程序设计之函数性能

setTimeout 比 setInterval 性能更好 // 取代setInterval setTimeout(function self () { // code goes here setTimeout(self, interval); }, interval); 对异步执行的大数组的分割执行 // 大块.异步数组的处理 function chunk(arr, process, context) { setTimeout(function self() { var item = arr.