如何在ES5与ES6环境下处理函数默认参数
发布网友
发布时间:2022-04-23 19:19
我来回答
共2个回答
懂视网
时间:2022-05-14 18:21
本篇文章给大家带来的内容是关于ES6中默认参数的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
语法
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
使用
function sum(a=0, b=0){
return a+b
}
sum() // 0
sum(1) // 1
sum(1, 2) // 3
使用babel
翻译一下
function sum() {
var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return a + b;
}
传值检测
从babel翻译的结果可以看出,默认参数只检查两种情况
不传参数
传入undefined
function sum(a=0){
return typeof a
}
sum() // 'number'
sum(undefined)// 'number'
sum(1) // 'number'
sum('1') // 'string'
sum(null) // 'object'
sum(false)// 'boolean'
前参后用
前面的参数可以作为后面参数的默认值,甚至可以对前面的参数做一些特别的操作,比如简单的加减乘除
function sum(a=1, b=a, c=a+b){
return [a, b, c]
}
sum() // [1, 2, 3]
sum(2) // [2, 2, 4]
sum(2,2) // [2, 2, 4]
sum(2,2,2) // [2, 2, 2]
默认参数调用函数
赋值默认参数甚至可以调用函数,可以调用函数,就已经说明无所不能了~
function sum(a=1, b=(()=>4)()){
return [a, b]
}
sum() // [1, 4]
sum(2) // [2, 4]
sum(2,2) // [2, 2]
注意: 无法调用函数内部声明的函数作为默认值
function sum(a=1, b=num2()){
function num2(){
return 4
}
return [a, b]
}
sum() // Uncaught ReferenceError: num2 is not defined
按序覆盖
参数还是按调用的时候传输的顺序一一覆盖的,不会因为它有默认值就跳过该形参的赋值
function sum(a=1, b ){
return [a, b]
}
sum() // [1, undefined]
sum(2)// [2, undefined]
sum(1,2) //[1, 2]
解构赋值默认参数
结构中也可以使用默认参数,虽然结构还没在这系列出现过
function sum([x, y] = [1, 2], {z: z} = {z: 3}) {
return [x, y, z];
}
sum() // [1, 2, 3]
sum([2,4],{z: 6}) // [2, 4, 6]
热心网友
时间:2022-05-14 15:29
函数传值调用时,实际参数作为右表达式想形式参数提供初始值。C++的允许指定参数的默认值,凼函数调用中升略默认参数时,默认值自动传递被调用函数
详解如何配置tsconfig.json
一般情况下,target的默认值为ES3,如果不配置选项的话,代码中使用的ES6特性,比如箭头函数会被转换成等价的函数表达式。 3、module module选项可以用来设置TypeScript代码所使用的模块系统。 如果target的值设置为ES3、ES5,那么module的默认值则为CommonJS;如果target的值为ES6或者更高,那么module的默认值则为ES6。 另外,...
es6定义const x=,在es5中该怎么定义
支持 const,但是 const 没有块级作用域 仅strict mode 支持 const 对于不支持的环境,就直接使用 var。注意一下作用域问题就好。如果想使用 es6 语法,并且可以在 es6 环境中可以正常运行,建议使用 babeljs。
es5和es6的区别
1、变量声明:ES5使用var关键字来声明变量,而ES6引入了let和const关键字。let关键字用于声明块级作用域的变量,解决了ES5中变量提升和作用域的问题。const关键字用于声明常量,它代表一个不可改变的值。这样更加清晰地定义和管理变量,提高代码的可读性和可维护性。2、箭头函数:ES6引入了箭头函数(Arrow...
ES5和ES6中继承的不同之处
(2)将空对象的proto指向构造函数的prototype (3)运行该构造函数 (4)如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型 2、ES6中的constructor()和super()(1)constructor()——构造方法:这是ES6对类(class)的默认...
es6 中 函数和方法的区别及用法
1,引入与导出方式不同//ES5varReact=require("react");//ES6importReact,{Component,PropTypes}from'react�0�2�0�2导入:ES5使用require导入,而ES6使用了import//ES5module.exports=Test;�0�2//ES6exportdefaultTest;�0�22,创建组件...
es6 的 import、export 和 commonjs 的 require、exports模块化分析...
首先创建项目并安装babel编译环境。在a.js文件中,使用es6语法导出三个变量及一个默认导出,使用babel编译后,可以看到es6的导入导出语句转换成了commonjs的写法。注意,export default被挂载到exports.default变量上,并定义了__esModule属性,表明此文件导出的是es6的模块。require导入 commonjs的导入使用...
es5和es6的区别
模块化是ES6的一大进步,通过import和export关键字,代码被划分为独立的模块,方便代码复用和组织,避免了ES5中自定义加载器或依赖第三方库的复杂性。在ES6中,块级作用域(let和const)让变量和函数的作用域更加明确,箭头函数简化了函数声明,而解构赋值则简化了处理数组和对象的操作。此外,类的引入和...
es6定义const x=,在es5中该怎么定义
es6定义const x=,在es5中该怎么定义 现在比较流行的解决这个问题的方法是使用 Promise,可以将嵌套的回调函数展平。但是写代码和阅读依然有额外的负担。另外一个方案是使用 ES6 中新增的 generator,因为 generator 的本质是可以将一个函数执行暂停,并保存上下文,再次调用时恢复当时的状态。co 模块是个...
es5和es6的区别
二、详细解释 语法差异:ES6在语法上增加了许多新特性,如引入了let和const关键字用于声明变量,这些关键字解决了ES5中var声明的一些不足。此外,ES6还引入了模块化的概念,允许开发者将代码拆分成独立的模块,提高了代码的可维护性和复用性。功能增强:ES6在功能上有很多增强,最显著的是引入了箭头函数、...
[万字总结]夯实你的TypeScript基础!(一)
二.可选参数npxtsc--init0 三.默认参数npxtsc--init1 四.剩余参数npxtsc--init2 五.函数的重载npxtsc--init3 5.类一.TS中定义类npxtsc--init4 实例上的属性需要先声明在使用,构造函数中的参数可以使用可选参数和剩余参数二.类中的修饰符 public修饰符(谁都可以访问到)npxtsc--init5 npxtsc--init6 我...