JS(第二十六)ES6语法中function

简介: JS(第二十六)ES6语法中function

1 Function函数的定义

方式1 函数声明方式 function 关键字 (命名函数)

function fn(){}

方式2 函数表达式(匿名函数)

var fn = function(){}

方式3 new Function()

var f = new Function('a', 'b', 'console.log(a + b)');
f(1, 2);
var fn = new Function('参数1','参数2'..., '函数体')

Function 里面参数都必须是字符串格式第三种方式执行效率低,也不方便书写,因此较少使用所有函数都是 Function 的实例(对象)  函数也属于对象

<!-- 函数定义的方式 -->
<script>
  // 方式1 函数声明方式 function 关键字 (命名函数)
  function fn(){
    console.log("fn")
    // 方式2 函数表达式(匿名函数)
    let fn2=function(){
      console.log("fn2")
      // 方式3 new Function() 
      // Function 里面参数都必须是字符串格式
      // 第三种方式执行效率低,也不方便书写,因此较少使用
      // 所有函数都是 Function 的实例(对象)  
      // 函数也属于对象
      // 
      var fn3=new Function('a','b','console.log(a + b)')
      fn3(3,4)
    }
    fn2()
  }
  fn()
</script>

 

2 Function函数的调用

<script>
  /* 1. 普通函数 */
  function fn() {
    console.log('出道即是顶峰');
    console.log(this)
  }
   fn(); 
  /* 2. 对象的方法 */
  var o = {
    sayHi: function() {
      console.log('路漫漫其修远兮,吾将上下而求索');
    console.log(this)
    }
  }
  o.sayHi();
  /* 3. 构造函数*/
  function Star() {
    console.log("构造函数")
    console.log(this)
  };
  new Star();
  /* 4. 绑定事件函数*/
  var btn =document.querySelectorAll("btton")
   btn.onclick = function() {};   // 点击了按钮就可以调用这个函数
  /* 5. 定时器函数*/
  setInterval(function() {
    console.log(this)
  }, 1000); 
   // 这个函数是定时器自动1秒钟调用一次
  /* 6. 立即执行函数(自调用函数)*/
  (function() {
    console.log('人生的巅峰');
    console.log(this)
  })();
</script>

 

3 Function改变this指向

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Function改变this指向</title>
</head>
<body>
  <!-- call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向
应用场景:  经常做继承.  -->
<script>
  const o={
    name:"我叫张三"
  }
  function fn(a,b){
    console.log((this))
    console.log(a+b)
  }
  fn(1,2)// 此时的this指向的是window 运行结果为3
  fn.call(o,2,3) 此时的this指向的是对象o,参数使用逗号隔开,运行结果为3
</script>
<!--  apply() 方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的 this 指向。
  应用场景:  经常跟数组有关系 -->
</body>
</html>

 

4 functionApply

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    const o = {
      name: 'andy'
    }
     function fn(a, b) {
          console.log(this);
          console.log(a+b)
    };
    fn(1,2)// 此时的this指向的是window 运行结果为3
    fn.apply(o,[1,2])//此时的this指向的是对象o,参数使用数组传递 运行结果为3
  </script>
</body>
</html>

 

5 FunctionBind

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
     var o = {
     name: 'andy'
     };
    function fn(a, b) {
      console.log(this);
      console.log(a + b);
    };
    var f = fn.bind(o, 1, 2); //此处的f是bind返回的新函数
    f();//调用新函数  this指向的是对象o 参数使用逗号隔开
  </script>
</body>
</html>

 

6 闭包

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- 变量根据作用域的不同分为两种:全局变量和局部变量。
  1. 函数内部可以使用全局变量。
  2. 函数外部不可以使用局部变量。
  3. 当函数执行完毕,本作用域内的局部变量会销毁 -->
  <!-- 闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。  -->
  <script>
    function all(){
      var num=1;
      function all2(){
        console.log(num);
        var age=22;
        function all3(){
          console.log(age)
        }
        all3()
      }
      all2()
    }
    all()
  </script>
</body>
</html>

相关文章
|
3天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
23 3
|
3天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的async/await,以及它如何解决回调地狱问题。
ES6的async/await是基于Promise的异步编程工具,简化了代码并提高可读性。它避免回调地狱,将异步操作转化为Promise,使得代码同步化。错误处理更直观,无需嵌套回调或.then()。
18 1
|
3天前
|
JavaScript 前端开发 Java
【JavaScript】基础语法(中)
【JavaScript】基础语法
13 1
|
23小时前
|
JavaScript 前端开发
前端 JS 经典:ES6 和 CommonJs 用法
前端 JS 经典:ES6 和 CommonJs 用法
6 0
|
3天前
|
JavaScript 前端开发 Java
【JavaScript】基础语法(下)
【JavaScript】基础语法
9 1
|
3天前
|
Web App开发 JavaScript 前端开发
【JavaScript】基础语法(上)
【JavaScript】基础语法
9 0
|
3天前
|
前端开发 JavaScript 索引
CSS常见用法 以及JS基础语法
CSS常见用法 以及JS基础语法
13 0
|
3天前
|
JavaScript
JS 基本语法
JS 基本语法
14 1
|
3天前
|
JavaScript 前端开发 C语言
JavaScript编程语法练习
本篇文章是对于javaScript中if ,switch,while ,do-while,,for语法的作业练习.对于我来说也是对自己知识掌握的一种检验.是对js的基础语法进行的一次练习,通过有趣的示例进行练习,使得对于代码能够增加印象,对于知识的掌握更加透彻.
|
3天前
|
JavaScript 前端开发
JavaScript语法(2)
【5月更文挑战第2天】JavaScript语法(2)。
18 3

热门文章

最新文章