vue3页面空白-普通函数和箭头函数提升的不同

在 JavaScript 中,普通函数(即使用 function 关键字定义的函数)和箭头函数(使用 () 和 => 定义的函数)在作用域和提升(hoisting)行为上有不同的表现。

1. 普通函数(Function Declarations) 普通函数声明会被提升(hoisted),也就是说,它们可以在声明之前被调用。这是因为函数声明会被提升到当前作用域的顶部。例如:

javascript 复制代码
console.log(foo()); // 输出 "Hello"

function foo() {
  return "Hello";
}

在这个例子中,尽管 foo 函数是在调用之后才声明的,但它仍然可以正常工作,因为函数声明会被提升。

2. 箭头函数和其他函数表达式 箭头函数和其他函数表达式(如使用 var, let, const 定义的函数)不会被提升。这意味着它们必须在声明之后才能被调用。例如:

javascript 复制代码
console.log(bar()); // 报错:TypeError: bar is not a function

const bar = () => {
  return "World";
};

在这个例子中,如果尝试在 bar 函数声明之前调用它,会导致错误,因为 bar 在声明之前只是一个未定义的标识符。


错例

javascript 复制代码
watchEffect(() => {
  if(calculateWinner(squareValues.value)){
    status.value = 'Winner: ' + calculateWinner(squareValues.value) + ' ! ';
  }
  else if(!squareValues.value.filter(item => item === '').length){
    status.value = 'Draw !';
  }
  else{
    status.value = 'Next player is ' + (xIsNext.value ? 'X' : 'O');
  }
});

const calculateWinner = (squares) => {
  const lines = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6]
  ];

  for(let i = 0; i < lines.length; i++) {
    const [a, b, c] = lines[i];
    if(squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
      return squares[a];
    }
  }

  return null;
}
相关推荐
biyezuopinvip1 天前
基于Spring Boot的投资理财系统设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·投资理财系统设计与实现
biyezuopinvip1 天前
基于Spring Boot的投资理财系统设计与实现(任务书)
java·spring boot·vue·毕业设计·论文·任务书·投资理财系统设计与实现
huohuopro1 天前
Vue3 Webview 转 Android 虚拟导航栏遮挡问题记录
android·vue
码界筑梦坊2 天前
332-基于XGBoost与SHAP的可穿戴设备亚健康风险识别系统
python·数据分析·flask·vue·毕业设计
上单带刀不带妹2 天前
【Axios 实战】网络图片地址转 File 对象,附跨域解决方案
开发语言·前端·javascript·vue
SuperEugene2 天前
前端模块化与 import/export入门:从「乱成一团」到「清晰可维护」
前端·javascript·面试·vue
~央千澈~3 天前
优雅草正版授权系统 - 优雅草科技开源2月20日正式发布
python·vue·php·授权验证系统
Roc.Chang4 天前
Vite 启动报错:listen EACCES: permission denied 0.0.0.0:80 解决方案
linux·前端·vue·vite
PD我是你的真爱粉4 天前
Vite 项目搭建与Pinia状态管理
前端框架·vue
麦麦大数据4 天前
F071_vue+flask基于YOLOv8的实时目标检测与追踪系统
vue.js·yolo·目标检测·flask·vue·视频检测