0


【javaScript函数进阶-----深入学习函数】

新星计划第一弹之函数的进阶!!!

===============================

函数的进阶

一、函数的定义

1.1函数的定义方式

  • 自定义函数(命名函数)function fn() {}
  • 函数表达式(匿名函数 var fun = function() {}
  • 利用new functionvar f=new Function('参数1','参数2','函数体')
  • 所有函数都是Function的实例对象

在这里插入图片描述
1.2函数的调用之立即执行函数

(function(){
    console.log('打印')})()

tips:instanceof关键字检测前者是否属于后者

二、this

this的指向问题

在这里插入图片描述
2.1改变函数内部this指向

常用方法://将this指向o

  • call方法fn.call(o)
  • bind方法
  • apply方法

apply方法:
区别于call的是传递参数必须是数组;

结合数学方法求数组中的最大值Math.max.apply(Math,arr);

bind方法:
不会调用函数

fn.bind(o,1,2);返回值是原函数改变this后的新函数,bind不会调用函数

bind应用有的函数不想要立即调用但是想要改变this指向,举例:有一个按钮点击之后禁用,3s之后开启这个按钮

<button>点击</button><script>var btn=document.querySelector('button');
            btn.onclick=function(){this.disabled=true;var that=this;setTimeout(function(){//that.disabled=false;//cuo  this指向windowthis.disabled=false;}.bind(btn||this),3000);}</script>

三、严格模式

i10以上版本支持严格模式,对js语义做了一些更改:

  1. 消除了语法的不合理,不严谨,不安全的行为
  2. 提高了编译器运行速度
  3. 禁用了一些未来关键字做变量名

3.1开启严格模式

分类:脚本开启严格模式、函数开启严格模式

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

为某个函数开启严格模式:
在函数体内部写入‘use strict’

3.1严格模式的变化

  1. 变量必须先声明后使用
  2. 严禁删除声明过得变量
  3. 严格模式下的全局作用域里this指向问题不再是window而是undefined
  4. 严格模式下,构造函数不加new调用,this会报错
  5. 实例化之后this指向的还是实例对象
  6. 计时器里面的this指向window

变化-----函数

  1. 普通模式下函数的参数名可以相同
  2. 不允许在非函数代码块内声明函数

四、高阶函数

什么是高阶函数?
高阶函数就是传递参数为函数,或者返回值为函数。因为函数也是一种数据类型,同样可以作为参数传递给另一个参数使用。

闭包作用:延伸了变量的作用范围

闭包函数的应用:

<script>var lis=document.querySelector('.nav').querySelectorAll('li');for(var i=0;i<lis.length;i++){(function(i){
                lis[i].onclick=function(){
                    console.log(i);}})(i);}</script>

五、面试

闭包

思考:

<script>var name="The window";var object={
            name:"My Object",
            getName:function(){returnfunction(){returnthis.name;}}}
        console.log(object.getName()());</script>

解析:
首先这个括号有点多想办法替换一下,设f=object.getName()问题就转换成了

console.log(f());

这里object.getName调用之后返回值是函数所有这里的f也是函数,再次调用一次

f=function() { return this.name; }

,这里要搞清楚this的指向,这里的function是匿名函数,所以this是指向window的,那么全局变量下的name属性值就是打答案-------The window。

稍微修改一下这道题:

<script>var name="The window";var object={
            name:"My Object",
            getName:function(){var that=this;returnfunction(){return that.name;}}}
        console.log(object.getName()());</script>

本文转载自: https://blog.csdn.net/qq_61516787/article/details/123416328
版权归原作者 orlandio 所有, 如有侵权,请联系我们删除。

“【javaScript函数进阶-----深入学习函数】”的评论:

还没有评论