Apakah penggunaan kurungan kerinting dalam javascript

WBOY
Lepaskan: 2022-03-24 16:13:16
asal
3478 orang telah melayarinya

Penggunaan pendakap dalam JavaScript: 1. Digunakan untuk menyusun pernyataan majmuk 2. Digunakan untuk menentukan objek, yang dalam kebanyakan kes mesti mempunyai atribut dan nilai berpasangan; 4. Digunakan sebagai simbol sintaks untuk pengendalian pengecualian berstruktur.

Apakah penggunaan kurungan kerinting dalam javascript

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.

Apakah kegunaan pendakap dalam JavaScript

Pendakap "{}" dalam Javascript mempunyai empat fungsi semantik:

Semantik 1. Menyusun pernyataan majmuk, Ini adalah yang paling biasa:

if( condition ) {
  //...
}else {
  //...
}
for() {
  //...
}
Salin selepas log masuk

Semantik 2, pengisytiharan literal objek:

var obj = {
    name : 'jack',
    age : 23
};
Salin selepas log masuk

Keseluruhannya ialah pernyataan tugasan, di mana { nama :'jack',umur:23} ialah ungkapan.

Semantik 3, mengisytiharkan fungsi atau fungsi literal:

function f1(){
    //...
}
var f2 = function(){
    //...
}
Salin selepas log masuk

Perbezaan antara f1 dan bukan f2 ialah yang pertama berada dalam tempoh tafsiran sintaks dan yang terakhir adalah dalam masa larian. Perbezaannya ialah: jika kod yang memanggil fungsi adalah selepas definisi fungsi, tiada perbezaan jika kod yang memanggil fungsi itu sebelum definisi fungsi, f1 masih boleh dipanggil, tetapi f2 akan melaporkan ralat, mendorong bahawa f2 tidak ditakrifkan.

Semantik 4, simbol tatabahasa untuk pengendalian pengecualian berstruktur:

try {
    //...
}catch( ex ){
    //...
}finally{
    //...
}
Salin selepas log masuk

Terdapat perbezaan antara pendakap di sini dan pernyataan pematuhan (Semantik 1). hanya terdapat satu pernyataan dalam if/else/for, pendakap kerinting boleh ditinggalkan, tetapi cuba/tangkap/akhirnya tidak boleh ditinggalkan.

Saya telah lama bergelut dengan kod berikut:

function(){}() //匿名函数立即执行, 语法分析期报
{}.constructor //获取对象直接量的构造器,语法分析期报错
Salin selepas log masuk

Apa yang membingungkan ialah mengapa [].pembina ditulis seperti ini tetapi tidak melaporkan ralat dapatkan pembina Pembina kuantiti langsung objek, seseorang hanyalah pembina untuk mendapatkan literal tatasusunan.

Sudah tentu, tiada ralat akan dilaporkan jika anda menambah pembolehubah untuk menerima, var c = {}.constructor;

Dalam situasi yang sama, seperti: var fn = function() {}(), tiada ralat akan dilaporkan .

sebenarnya disebabkan oleh "keutamaan pernyataan" js, iaitu, {} difahami sebagai blok pernyataan majmuk (semantik 1) dan bukannya semantik objek literal (semantik 2) atau fungsi yang diisytiharkan (semantik 3).

function(){}(), kurungan kerinting difahami sebagai pernyataan majmuk Sememangnya, sintaks fungsi pengisytiharan function() sebelumnya tidak lengkap, menyebabkan ralat semasa analisis sintaks. {}.pembina, pendakap kerinting difahami sebagai pernyataan majmuk dan pendakap kerinting diikuti oleh pengendali titik Jika tiada objek munasabah sebelum pengendali titik, ralat secara semula jadi akan dilaporkan.

Pembetulan sudah diketahui: tambah pengendali paksaan ()

(function(){})(), (function(){});//Paksa ia menjadi difahami sebagai fungsi (semantik 3), "Fungsi ()" bermaksud melaksanakan fungsi, iaitu, ia dilaksanakan serta-merta selepas pengisytiharan. ({}).pembina //({}) memaksa pendakap kerinting untuk difahami sebagai literal objek (semantik 2) bermaksud mendapatkan ahli objek Secara semula jadi, pengendali titik seterusnya boleh dilaksanakan secara normal .

function(){}(); Sebab ralat sintaks tiada kaitan dengan operator panggilan fungsi.

Sebab yang penting ialah function(){} secara berkesan mengumpulkan token mengikut tempoh analisis leksikal. fungsi dianggap sebagai elemen token pertama pada kedudukan permulaan Pernyataan Ungkapan ini. Ini tidak dibenarkan oleh EMCA262. Sebab mengapa ia tidak dibenarkan adalah sangat jelas, iaitu, ia takut menyebabkan kekaburan antara ungkapan fungsi dan pengisytiharan fungsi. Anda boleh memahami bahawa kata kunci fungsi tidak boleh berada di tempat pertama dalam ExpressionStaement.

Mari kita lihat pernyataan tugasan f = function(){};

f : LeftHandSideExpression
= : AssignmentOperator
Salin selepas log masuk

function(){}; pada masa ini ia dianggap sebagai bahagian ungkapan tugasan keseluruhan pernyataan, iaitu, AssignmentExpression. Jadi ia lulus semakan tatabahasa secara munasabah dan sah dan menjadi ungkapan fungsi FunctionExpression.

Jadi pada masa ini, walaupun anda f = function(){}();

Cadangan berkaitan: Tutorial pembelajaran javascript

Atas ialah kandungan terperinci Apakah penggunaan kurungan kerinting dalam javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!