首页 > 其他分享 >vue之箭头函数

vue之箭头函数

时间:2024-04-28 20:35:45浏览次数:17  
标签:function vue obj log 箭头 console 函数

箭头函数定义

箭头函数(将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体。):
const ddd=()=>{}:()参数;{}方法体,可以直接是返回的表达式

1、箭头函数的使用

定义函数的三种方式:
<script>
//箭头函数:也是一种定义函数的方式
//1.定义函数的方式:function
const aaa=function () {

}

//2.对象字面量中定义函数
  const obj={
    bbb: function () {

    },
    ccc() {

    }
  }
//3.es6中的箭头函数
//   const ddd=(参数列表)=>{}
  const ddd=()=>{}//无参写法
</script>

2、箭头函数参数和返回值

当函数参数只有一个,括号可以省略;但是没有参数时,括号不可以省略。

// 无参
var fn1 = function() {}
var fn1 = () => {}
 
// 可变参数
var fn4 = function(a, b, ...args) {}
var fn4 = (a, b, ...args) => {}
<script>
  //1.参数问题:
  //1.1放入两个参数
  const sum =(num1,num2)=>{
    return num1+num2
  }

//  1.2放入一个参数,小括号省略
  const power= num=>{
    return num*num
  }


//  2.
//  2.1函数代码块中有多行代码时
  const test=()=>{
  //  1.打印一个hello Word
    console.log("hello world");

  //  2.打印hell vue
    console.log("hello vue");
  }

//  2.2函数代码块中只有一行代码时,有特殊写法
//   const mul=(num1,num2)=>{
  //     return num1*num2
  //   }
  const mul=(num1,num2)=> num1*num2
  console.log(mul(20, 30));

//  无返回值
  const demo=()=>console.log("hello world");
  demo()
</script>

注意:
· 对于箭头函数的返回值,如果是return一个对象的话,需要特别注意:如果是单表达式要返回自定义对象时,一定要加上括号,不加括号的话会报错,因为和函数体的{ … }有语法冲突。

x => {key: x} // 报错
x => ({key: x}) // 正确
//注意,用小括号包含大括号则是对象的定义,而非函数主体


· 箭头函数看上去像是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。(词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变 。)简单来说,箭头函数中的this是向外层作用域中一层层查找this的指向的,直到查到有this的定义为止。

3、箭头函数中的this

在讲箭头函数中的this的时候先来看看普通函数的this是指向什么的:
普通函数的this在声明时指向window,在调用时指向调用它的对象,如果直接调用,也指向window

function b() {
	function a(){ 
		console.log(this) 
	}
	let c = function() {
		a()
	}
	let obj2 = {a,c}
	obj2.a()//打印出obj2,打印出调用时的对象obj2
	obj2.c()//打印出window,打印出直接调用时的对象window
}
let obj = {b}
obj.b()//使函数b内上下文this为obj


箭头函数的this在声明时指向window,在调用时指向声明时所在的上下文this。也就是说箭头函数中的this是向外层作用域中一层层查找this,查到有this的定义为止

<script>
  //什么时候使用箭头函数
  // setTimeout(function () {
  //    console.log(this)
  // },1000)
  // setTimeout(()=>{
  //   console.log(this)
  // },1000)


  //结论:箭头函数中的this是如何查找的
  //答案:向外层作用域中一层层查找this,查到有this的定义为止
  const obj={
    aaa() {
      setTimeout(function () {
        console.log(this)//window
      })
      setTimeout(()=>{
        console.log(this)//obj
      })
    }
  }

  obj.aaa()
</script>

4、关于call、apply、bind

对于普通函数来说,这三个方法都适用:
let obj = {}
let a = function() { console.log(this) }
a.call(obj)//obj
a.apply(obj)//obj
a = a.bind(obj)
a()//obj


而对于箭头函数来说,因为箭头函数的特殊性三个方法都不适用:
let obj = {}
let a = () => { console.log(this) }
a.call(obj)//window
a.apply(obj)//window
a.bind(obj)
a()//window

5、注意事项

不能用作构造函数
不能使用arguments
不能作为对象的方法调用,因为还是指向上下文,而不是调用的对象
如果需要this操作,不能用作addEventListener里传的参数

6、结合箭头函数写过滤案例

//  箭头函数

    // 1 匿名函数
    // var f=function (name) {
    //     console.log(name)
    // }
    // f('quan')

    // 2 箭头函数--》无参数无返回值
    // var f1 = () => {
    //     console.log('我是箭头函数')
    // }
    // f1()

    // 3 箭头函数--》有多个参数无返回值
    // var f2 = (name,age) => {
    //     console.log(name,age)
    // }
    // f2()

    // 3 箭头函数--》有一个参数无返回值
    // var f3 = name => {
    //     console.log(name)
    // }
    // f3('pengyuyan')

    // 4 箭头函数:有一个参数,一个返回值
    // var f4 = name => {
    //     return name+'_nb'
    // }
    // f4('pengyuyan')

    //5 简写成
    var f5 = name => name+'_nb'
    var res=f5('pengyuyan')
    console.log(res)

    // 6 箭头函数内部,没有自己this,箭头函数内部用this---》就是上面作用域的this
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./vue/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>过滤案例</h1>
    <input type="text" v-model="myText" @input="handleInput">
    <hr>
    <ul>
        <li v-for="item in newdataList">{{item}}</li>
    </ul>

</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            myText: '',
            dataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf', 'atome', 'atomem'],
            newdataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf', 'atome', 'atomem'],
        },
        methods: {
            handleInput() {
                this.newdataList = this.dataList.filter(item=> item.indexOf(this.myText) >= 0)
            },
        }
    })
</script>
</html>

标签:function,vue,obj,log,箭头,console,函数
From: https://www.cnblogs.com/queryH/p/18164423

相关文章

  • vue3项目打包的时候报错'openBlock' is not exported by node_modules/...
    用了一个手写签名的,开发环境中一切正常,但是在打包发布的时候,就报错了。'openBlock'isnotexportedbynode_modules/vue-esign/node_modules/vue/dist/vue.runtime.esm.js.... 这个应该是vue版本重复导致的。 解决:在vite.config.ts中加入 dedupe:['vue'],  dedupe是......
  • vue之修饰符
    1修饰符分类·表单修饰符---(属于v-model进阶使用)·事件修饰符·按键修饰符·v-bind修饰符2、表单修饰符修饰符作用使用lazy填写信息之后,光标离开标签的时候才会将值赋予给valuetrim自动过滤用户输入的首个空格字符,中间的空格不会过滤number自动......
  • vue与后端的数据交互
    一、前后端数据交互简单的前后端数据交互流程:·在前端(浏览器)中发起HTTP请求:使用前端框架(如Vue.js)或者原生JavaScript,您可以通过发送HTTP请求(如GET、POST、PUT、DELETE)向后端服务器请求数据。·后端服务器处理请求:后端服务器接收到前端发送的HTTP请求,并根据请求的类型和参数进......
  • vue之计算属性与监听属性
    一、计算属性1、什么是计算属性--computed计算属性是Vue中的⼀种特殊属性,⽤于对已有的数据进⾏计算和衍⽣,以⽣成新的数据。计算属性的值是根据依赖的数据动态计算得出的,当依赖的数据发⽣变化时,计算属性会⾃动重新计算。2、计算属性的作用计算属性的主要作⽤是对数据进⾏处......
  • UES-03-函数
    带参数默认值的函数函数的参数数量不受声明时指定的参数个数影响,可以有任意多个。函数声明时使用参数默认值直接在形参后面添加'=defaultValue'即可。可以给任意位置的参数添加默认值,只有当没有给这个位置的参数传值或者传的值为undefined时该参数使用默认值。在使用参数......
  • 为什么vue打印的对象在浏览器中显示...
    1.现象当在vue中打印对象的时候会发现有一些属性或者全部属性都是显示的...,点击展开后才能看到真正的值是什么.2.原因因为在vue中对象都是用了代理重写了get,由于get重写也就导致了浏览器不能直接获取到具体的值,因此才会在打印的时候为...,手动点击展开才显示具体的值......
  • MySQL函数详解
     CONCAT()用途:连接两个或多个字符串。示例:sql`SELECTCONCAT('Hello','','World')ASGreeting;` 这将返回 'HelloWorld'。LOWER()和UPPER()用途:将字符串转换为小写或大写。示例:sql`SELECTLOWER('HELLO')ASLowercase,UPPER(&#......
  • vue3 引入workers 大量优化业务代码和复杂的计算的代码
    前沿vite页面引入worker在src新建一个 worker.d.ts文件declaremodule'*.worker.ts'{classWebpackWorkerextendsWorker{constructor();}exportdefaultWebpackWorker;}在 tsconfig.json页面引入"lib":["esnext",......
  • 『手撕Vue-CLI』添加自定义指令
    前言经上篇『手撕Vue-CLI』添加帮助和版本号的介绍之后,已经可以在控制台中输入nue--help来查看帮助信息了,但是在帮助信息中只有--version,--help这两个指令,而vue-cli中还有很多指令,例如create,serve,build等等,所以本章将继续添加自定义指令,例如create指令。添加create......
  • 最近常用的几个【行操作】的Pandas函数
    最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记。1.shfit函数shift函数在策略回测代码中经常出现,计算交易信号,持仓信号以及资金曲线时都有涉及。这个函数的主要作用是将某列的值上下移动。默认情况下,shift函数是向下移动一行,移动后,新......