目录
因为没有function声明,所以没有原型prototype,所以不能作为构造函数
function sum(...numbers) {
let total = 0;
for (let number of numbers) {
total += number;
}
return total;
}
console.log(sum(1, 2, 3)); // 输出 6
const fun = () => "S";
console.log(fun());// "S"
console.log((() => "S")());// "S"
console.log(() => "S");// () => "S"
()
?运算符闭合起来。这样不但阻止了外界访问 IIFE 中的变量,而且不会污染全局作用域。()
,通过它,JavaScript 引擎将立即执行该函数。(function () {
// …
})();
(() => {
// …
})();
(async () => {
// …
})();
类内function不用function声明,但也可变量提升
? ?function add(x, y) {
? ? ?return x + y;
? ?}
const、let、calss不会提升
? ?const add = function(x, y) {
? ? ?return x + y;
? ?};
无论时类组件还是函数组件,都是用箭头函数表达式避免this问题
import React, { Component } from 'react'; // 请确保导入 React 和 Component
class APP extends Component {
constructor(props) {
super(props);
// 将 handleClick 方法绑定到组件实例的上下文
this.handleClick5 = this.handleClick5.bind(this);
}
handleClick1(ev) {
console.log(this);//undefined
console.log(ev);//合成的SyntheticBaseEvent?
console.log(ev.target);//button
}
//箭头函数
//方法A:类中箭头
handleClick2 = () => {
console.log(this);//APP类组件实例
}
//方法B:onclick中箭头
handleClick3() {
console.log(this);//APP类组件实例
}
// bind绑定组件实例this
// 方法A:onclick
handleClick4() {
console.log(this); //APP类组件实例
}
// 方法B:constructor
handleClick5() {
console.log(this); //APP类组件实例
}
render() {
return (
<div>
<button onClick={this.handleClick1}>点击1</button>
{/* 箭头函数 */}
<button onClick={this.handleClick2}>点击2</button>
<button onClick={() => { this.handleClick3() }}>点击3</button>
{/* bind */}
<button onClick={this.handleClick4.bind(this)}>点击4</button>
<button onClick={this.handleClick5}>点击5</button>
</div>
);
}
}
export default APP;