当前位置: 首页 > wzjs >正文

阿里云做的网站程序员软文宣传推广

阿里云做的网站程序员,软文宣传推广,浙江常升建设有限公司网站,端州网站建设一、变量提升 变量提升(Hoisting)是 JavaScript 中的一个特性,它指的是: 在代码执行前,变量的声明(不是赋值)会被“提升”到当前作用域的顶部。 🌟 举个例子: console.…

一、变量提升

变量提升(Hoisting)是 JavaScript 中的一个特性,它指的是:

在代码执行前,变量的声明(不是赋值)会被“提升”到当前作用域的顶部。


🌟 举个例子:

console.log(x); // 输出:undefined
var x = 10;

你可能觉得这段代码会报错,但实际上它不会。

这是因为 JavaScript 在“执行前”会自动把 var x 提到代码的最上面,相当于这样:

var x;          // 声明被提升了
console.log(x); // 这里访问的是 x,但还没赋值,结果是 undefined
x = 10;         // 赋值发生在这一行

❗注意几点:

  1. 只有声明被提升,赋值不会提升!

    console.log(a); // undefined,而不是 5
    var a = 5;
    
  2. 函数声明也会被提升,但函数表达式不会

    greet(); // OK,输出 Hello
    function greet() {console.log("Hello");
    }greet2(); // ❌ 报错:greet2 is not a function
    var greet2 = function () {console.log("Hi");
    };
    
  3. letconst 也会被“提升”,但不会初始化,访问会报错(TDZ)

    console.log(b); // ❌ ReferenceError: Cannot access 'b' before initialization
    let b = 20;
    

    这叫做“暂时性死区(TDZ,Temporal Dead Zone)”。


✅ 建议写法:

  • 避免使用 var,使用 letconst

  • 把变量声明放在使用之前,代码更清晰,逻辑更直观。

这是一个非常好的问题,触及了 JavaScript 的历史、兼容性以及开发习惯演变。我们来深入、清晰地解答这个问题:


🌍 为什么 var 仍然存在?

1. 历史兼容性(向后兼容)

  • varJavaScript 最初就有的变量声明方式,存在于 ES5(2009年)及更早的版本。

  • letconstES6(2015年) 才引入的新特性。

  • 如果完全废弃 var,会导致 大量旧代码无法运行,这对于浏览器厂商和开发者都是灾难性的。

➡️ 所以 var 仍被支持,是为兼容旧代码。


📌 使用 var 有哪些坑?

特性varlet / const
作用域函数作用域块级作用域
变量提升有(声明提升 + 初始化为 undefined)有声明提升但存在 TDZ(初始化前不能访问)
允许重复声明✅ 是❌ 不允许
推荐程度🚫 不推荐✅ 推荐

示例:

if (true) {var x = 10;
}
console.log(x); // ✅ 输出 10,x 逃出了 if 块if (true) {let y = 20;
}
console.log(y); // ❌ ReferenceError

✅ 总结:你该怎么做?

  • 新项目中,强烈推荐只用 letconst

    • 默认用 const,只有需要修改变量值时再用 let

  • 除非你明确在维护旧代码,或有特殊兼容性需求,否则应该避免使用 var

  • 在团队开发中可使用 ESLint 等工具强制禁止使用 var

 


二、函数声明提升

“函数声明提升(function hoisting)”是 JavaScript 的特有行为,它并不普遍存在于其他大多数编程语言中,尤其是静态类型语言(如 Java、C++、Python)中。


✅ 回顾一下 JavaScript 中的函数提升:

在 JavaScript 中,如果使用 函数声明function 关键字直接定义),整个函数(包括函数体)都会被提升到作用域顶部,你可以在声明之前调用它:

sayHi(); // ✅ 输出 "Hi"function sayHi() {console.log("Hi");
}

但如果使用 函数表达式,即把函数赋值给变量,那么只有变量声明被提升,函数体不会被提升

sayHello(); // ❌ 报错:sayHello is not a functionvar sayHello = function() {console.log("Hello");
};

❓其它语言是否有函数提升?

🔸 Python:

没有函数提升,函数必须在使用之前定义:

say_hello()  # ❌ NameError: name 'say_hello' is not defineddef say_hello():print("Hello")

🔸 C / C++:

函数定义前必须有 函数声明(prototype),否则编译不通过:

int add(int, int); // 函数声明int main() {int result = add(2, 3); // OK
}int add(int a, int b) { // 函数定义return a + b;
}

🔸 Java:

类方法要写在类中,没有提升,编译器需要先知道方法的签名。


💡 为什么 JavaScript 这么设计?

JavaScript 是一种解释型语言,设计之初为了方便开发者快速书写脚本,提供了“先用后声明”的容忍机制。解释器在执行之前会做一个“预扫描”(预处理阶段),把变量和函数的声明提取出来,这就造成了所谓的“提升”现象。


🔚 总结:

特性JavaScriptPythonC/C++Java
变量提升var 有,let/const 没有
函数提升✅ 函数声明提升❌(需声明)

http://www.dtcms.com/wzjs/135234.html

相关文章:

  • 要做网站最近的新闻事件
  • 2003系统做网站百度app优化
  • 免费的高清视频素材网站seo排名外包
  • wordpress建站系统视频教程上海谷歌优化
  • 电信网站开发语言主要用什么百度seo关键词优化工具
  • 廊坊网站建设佛山厂商在线生成个人网站app
  • 有个可以做图片的网站优化大师官网入口
  • 做直销建立个人网站好吗北京优化seo排名优化
  • adobe photoshopseo外链优化
  • 网站开发编译器百度客服工作内容
  • 涞源网站建设成人技术培训学校
  • 大学专业建设的内容北京seo外包平台
  • 做全国社保代理的网站百度助手免费下载
  • 惠州设计公司logoseo网站推广教程
  • 做微商在哪个网站打广告好合肥做网络推广的公司
  • 建一个企业网站要花多少钱市场调研报告word模板
  • b站推广网站2023年绍兴seo公司
  • 东营 网站建设谷歌chrome
  • 网站建设培训南宁汕头网站建设
  • 昌邑住房和城乡建设局网站视频互联网推广选择隐迅推
  • 家谱用网站做营销推广seo
  • 嘉祥网站建设哪家便宜线上销售平台有哪些
  • 靖江有帮助做苏宁易购网站的公司吗站长之家网站介绍
  • 动易网站模板幽默软文经典案例300
  • net网站开发网络营销策略包括
  • 网站 禁止ping百度宁波营销中心
  • 做网站 数据库解封后中国死了多少人
  • 做自己照片视频网站网站排名优化培训哪家好
  • 做网站然后推广免费b站推广网站链接
  • wordpress建多个网站网站模板免费