js中变量声明以及函数声明提升的详细解析(附示例)
本篇文章给大家带来的内容是关于js中变量声明以及函数声明提升的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
变量声明提升
1、变量定义
可以使用var定义变量,变量如果没有赋值,那变量的初始值为undefined。
2、变量作用域
变量作用域指变量起作用的范围。变量分为全局变量和局部变量。全局变量在全局都拥有定义;而局部变量只能在函数内有效。
在函数体内,同名的局部变量或者参数的优先级会高于全局变量。也就是说,如果函数内存在和全局变量同名的局部变量或者参数,那么全局变量将会被局部变量覆盖。
所有不使用var定义的变量都视为全局变量
3、函数作用域和声明提前
JavaScript的函数作用是指在函数内声明的所有变量在函数体内始终是有定义的,也就是说变量在声明之前已经可用,所有这特性称为声明提前(hoisting),即JavaScript函数里的所有声明(只是声明,但不涉及赋值)都被提前到函数体的顶部,而变量赋值操作留在原来的位置。如下面例子:
注释:声明提前是在JavaScript引擎的预编译时进行,是在代码开始运行之前。
var scope = 'global';function f(){ console.log(scope); var scope = 'local'; console.log(scope); }
由于函数内声明提升,所以上面的代码实际上是这样的
var scope = 'global';function f(){ var scope; //变量声明提升到函数顶部 console.log(scope); scope = 'local'; //变量初始化依然保留在原来的位置 console.log(scope); }
经过这样变形之后,答案就就非常明显了。由于scope在第一个console.log(scope)语句之前就已经定义了,但是并没有赋值,因此此时scope的指是undefined.第二个console.log(scope)语句之前,scope已经完成赋值为’local’,所以输出的结果是local。
函数声明提升
函数声明语法
f('superman');function f(name){ console.log(name); }
函数表达式语法
f('superman');var f= function(name){ console.log(name); }
运行上面的代码,会报错Uncaught ReferenceError: f is not defined(…),错误信息显示说f没有被定义。
为什么同样的代码,函数声明和函数表达式存在着差异呢?
这是因为,函数声明有一个非常重要的特征:函数声明提升,函数声明语句将会被提升到外部脚本或者外部函数作用域的顶部(是不是跟变量提升非常类似)。正是因为这个特征,所以可以把函数声明放在调用它的语句后面。如下面例子,最终的输出结果应该是什么?:
var getName = function(){ console.log(2); }function getName (){ console.log(1); } getName();
可能会有人觉得最后输出的结果是1。让我们来分析一下,这个例子涉及到了变量声明提升和函数声明提升。正如前面说到的函数声明提升,函数声明function getName(){}的声明会被提前到顶部。而函数表达式var getName = function(){}则表现出变量声明提升。因此在这种情况下,getName也是一个变量,因此这个变量的声明也将提升到底部,而变量的赋值依然保留在原来的位置。需要注意的是,函数优先,虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量。因此上面的函数可以转换成下面的样子:
function getName(){ //函数声明提升到顶部 console.log(1); } var getName; //变量声明提升 getName = function(){ //变量赋值依然保留在原来的位置 console.log(2); } getName(); // 最终输出:2
所以最终的输出结果是:2。在原来的例子中,函数声明虽然是在函数表达式后面,但由于函数声明提升到顶部,因此后面getName又被函数表达式的赋值操作给覆盖了,所以输出2。
相关推荐:
Atas ialah kandungan terperinci js中变量声明以及函数声明提升的详细解析(附示例). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Parameter lalai dalam C++ menyediakan keupayaan untuk menentukan nilai lalai untuk parameter fungsi, dengan itu meningkatkan kebolehbacaan kod, kesederhanaan dan fleksibiliti. Isytihar parameter lalai: Tambahkan simbol "=" selepas parameter dalam pengisytiharan fungsi, diikuti dengan nilai lalai. Penggunaan: Apabila fungsi dipanggil, jika parameter pilihan tidak disediakan, nilai lalai akan digunakan. Kes praktikal: Fungsi yang mengira jumlah dua nombor Satu parameter diperlukan dan satu lagi adalah pilihan dan mempunyai nilai lalai 0. Kelebihan: Kebolehbacaan yang dipertingkatkan, peningkatan fleksibiliti, pengurangan kod plat dandang. Nota: Ia hanya boleh dinyatakan dalam pengisytiharan, ia mestilah pada penghujungnya, dan jenisnya mestilah serasi.

Dalam C++, susunan pengisytiharan dan definisi fungsi mempengaruhi proses penyusunan dan pemautan. Yang paling biasa ialah pengisytiharan didahulukan dan definisi datang selepas; anda juga boleh menggunakan "pengisytiharan hadapan" untuk meletakkan definisi sebelum pengisytiharan jika kedua-duanya wujud pada masa yang sama, pengkompil akan mengabaikan perisytiharan dan hanya menggunakan definisi.

Menyelesaikan masalah "error:useofundeclaredidentifier'variable'" dalam kod C++ Apabila pengaturcaraan dalam C++, kita sering menghadapi pelbagai ralat. Salah satu ralat biasa ialah "error:useofudeclaredidentifier'variable'". Ralat ini biasanya bermakna kami menggunakan pembolehubah yang tidak diisytiharkan dalam kod kami. Artikel ini akan terperinci

Pengisytiharan fungsi memberitahu pengkompil tentang kewujudan fungsi dan tidak mengandungi pelaksanaan, yang digunakan untuk pemeriksaan jenis. Definisi fungsi menyediakan pelaksanaan sebenar, termasuk badan fungsi. Ciri membezakan utama termasuk: tujuan, lokasi, peranan. Memahami perbezaan adalah penting untuk menulis kod C++ yang cekap dan boleh diselenggara.

Pengisytiharan dan definisi fungsi diperlukan dalam C++ Pengisytiharan fungsi menentukan jenis pulangan, nama dan parameter fungsi, manakala definisi fungsi mengandungi badan fungsi dan pelaksanaan. Mula-mula mengisytiharkan fungsi dan kemudian gunakannya dalam program anda dengan lulus parameter yang diperlukan. Gunakan pernyataan pulangan untuk mengembalikan nilai daripada fungsi.

Ralat kompilasi C++: panggilan fungsi tidak sepadan dengan pengisytiharan fungsi, bagaimana untuk menyelesaikannya? Apabila membangunkan program C++, anda pasti akan menghadapi beberapa ralat kompilasi Salah satu ralat biasa ialah panggilan fungsi tidak sepadan dengan pengisytiharan fungsi. Ralat jenis ini wujud secara meluas dalam kalangan pengaturcara C++ Disebabkan tidak memberi perhatian kepada ketepatan pengisytiharan fungsi, ia membawa kepada masalah kompilasi, yang akhirnya membuang masa dan tenaga untuk menyelesaikan masalah dan menjejaskan kecekapan pembangunan. Cara untuk mengelakkan kesilapan ini memerlukan mengikut beberapa norma dan amalan standard, mari kita lihat di bawah. Apakah panggilan fungsi berbanding pengisytiharan fungsi?
![[[nodiscard]] dalam pengisytiharan fungsi C++: Menjelaskan akibat mengabaikan nilai pulangan](https://img.php.cn/upload/article/000/465/014/171455868319393.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Atribut [[nodiscard]] menunjukkan bahawa nilai pulangan fungsi tidak boleh diabaikan, jika tidak, ia akan menyebabkan amaran atau ralat pengkompil untuk mengelakkan akibat berikut: pengecualian yang tidak dimulakan, kebocoran memori dan hasil pengiraan yang salah.

PHP ialah bahasa pembangunan web yang sangat popular yang membolehkan pembangun mencipta aplikasi web dinamik pada bahagian pelayan. Dalam PHP, pembolehubah ialah struktur data asas yang digunakan untuk menyimpan nilai dan data. Artikel ini akan memperkenalkan cara menggunakan pembolehubah dalam PHP. Sintaks Asas Pembolehubah Sintaks untuk mengisytiharkan pembolehubah dalam PHP adalah sangat mudah. Nama pembolehubah bermula dengan tanda dolar ($), diikuti dengan nama pembolehubah. Nama boleh ubah boleh menjadi gabungan huruf, nombor atau garis bawah, tetapi ia mesti bermula dengan huruf atau garis bawah. Sebagai contoh, kod berikut mengisytiharkan nama
