什么是语法糖?

形容车多的成语2023-02-17  17

知乎问题:什么是语法糖?

我觉得语法糖(Syntactic Sugar)这个概念可以跟语言特性(Language Feature)作区分。

语法糖,比如装饰器的@写法,你不用它,还是可以实现对应的功能(而且像

@马致远 说的可以做到运行时等价->可以理解为表达不同,而语义等价),只是说写法繁琐一些。语法糖是语法(Syntax)层面的;

语言特性,比如闭包,如果语言内部没有实现,那么用这个语言你再怎么写也实现不了函数(这里不纠结“函数”的定义)内的自由变量。语言特性是语义(Semantics)层面的。

语法糖(盐、糖精...)可以类比于自然语言中的缩写/别称,而语言特性类比于语义/全名。语法糖存在的前提是对应功能的语义已经可以被实现(或者说有语言特性的支持),就像CN代表China,但首先得有China这个语义。

语言特性像是大道,语法糖像是捷径,而语法盐emmm...像是黑魂里的病村。

维基百科给的定义:

语法糖 (英语:Syntactic sugar)是由英国 计算机科学家 彼得·兰丁 发明的一个术语,指 计算机语言 中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

简单说,语法糖就是改变了一种形式,这种形式让程序的书写更加简洁明了

定义一个函数fn,接受参数num

写一个Generator依次调用传递的参数

async函数的写法

我们发现async函数把testGen里的*替换成 async,将 yield 替换成 await而已。所以说async/await是generator的语法糖

原文: https://mp.weixin.qq.com/s/RmslOGB6gLUHNFqY5ElQRA

下一篇:JS版数据结构-栈

Vue3官方提供了 script setup  语法糖

只需在script标签中添加setup,组件只需引入不用注册,属性和方法也不用返回,也不用写setup函数,也不用写export default ,甚至是自定义指令也可以在我们的template中自动获得。如下:

因为没有了setup函数,那么props,emit,attrs怎么获取呢

setup script语法糖提供了新的API来供我们使用

defineProps  用来接收父组件传来的 props   defineEmits  用来声明触发的事件。

//父组件

<template>

  <my-son foo="" @change="childClick" />

</template>

<script lang="ts" setup>

import MySon from "./MySon.vue"

let childClick = (e: any):void =>{

  console.log(e)  //

}

</script>

//子组件

<template>

  <span @click="sonClick">信息:{{ props.foo }}</span>

</template>

<script lang="ts" setup>

import { defineEmits, defineProps} from "vue"

const emit = defineEmits(["change"])    // 声明触发事件 change

const props = defineProps({ foo: String })  // 获取props

console.log(props)

const sonClick = () =>{

    emit('change' , props.foo)

}

</script>

总结

1、语法糖就是setup()简写

2、在语法糖中使用变量可以直接使用

3、组件不需要祖册

4、不能使用非vue3的模块,钩子函数


转载请注明原文地址:https://juke.outofmemory.cn/read/2975099.html

最新回复(0)