Rumah hujung hadapan web tutorial js javascript权威指南 学习笔记之变量作用域分享_javascript技巧

javascript权威指南 学习笔记之变量作用域分享_javascript技巧

May 16, 2016 pm 06:01 PM
skop berubah-ubah

不知道,大家对语言中变量的“声明”与“定义”是怎么理解的,
我的理解如下:
“声明”变量,只是仅仅声明,而“定义”变量,指声明了,并且赋值了。
例如:

复制代码 代码如下:

var name;//只是声明
var num = 11;//声明,并且赋值,即定义了
var password = "yangjiang";//声明,并且赋值,即定义了

下面是几点总结:
变量的作用域:全局的和局部的。(注意:如果尝试读取一个未声明的变量的值,javascript会生成一个错误)
第一点:在都使用var关键字修饰变量的情况下,如果给一个局部变量或函数的参数声明的名字与某个全局变量的名字相同,
那么就有效地隐藏了这个全局变量。
例如:
复制代码 代码如下:

var scope1 = "global";//var修饰
function checksScope(){
var scope1 = "local";//var修饰
document.write(scope1);
}checksScope();//local

第二点:如果尝试给一个未用 var 关键字声明的变量,那么,隐式声明的变量总是被创建为全局变量,即使
该变量只在一个函数体内使用(只有该函数运行了,才会发生作用),注意不支持函数嵌套的情形。
例如:
复制代码 代码如下:

scope2 = "globalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
function checkScopeA(){
scope2 = "localAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write("
"+scope2);
myscope = "myLocalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write(","+myscope);
}
checkScopeA();//localAAAAA,myLocalAAAAA *A
document.write("
"+scope2);//localAAAAA *B
document.write("
"+myscope);//myLocalAAAAA *C

如果将上面的例子中的 *A处的代码注释掉,
例如:
复制代码 代码如下:

scope2 = "globalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
function checkScopeA(){
scope2 = "localAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write("
"+scope2);
myscope = "myLocalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write(","+myscope);
}
//checkScopeA(); *A
document.write("
"+scope2);//globalAAAAA *B
document.write("
"+myscope);//发生错误 *C

因为函数checkScopeA没有执行,所以 *B处输出为globalAAAAA;
因为函数checkScopeA没有执行,所以变量myscope没有声明,如果尝试读取一个未声明的变量,会发生错误。
第三点:
在javascript中,函数的定义是可以嵌套的。由于 每个函数都有它自己的局部作用域,所以有可能出现几个局部作用域的嵌套层。
例如:
复制代码 代码如下:

var scope3 = "global scope"; //定义了一个全局变量
function checkScopeB(){
var scope3 = "local scope"; //定义了一个局部变量,覆盖了全局变量scope3
function nested(){
var scope3 = "nested scope"; //在函数的函数的内部,定义了一个局部变量
document.write("
"+scope3); //nested scope
}
nested();
}
checkScopeB();//nested scope

第四点:
在javascript中,没有块级作用域,函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有声明的。
在javascript中,没有块级作用域,函数中定义的所有变量,无论是在哪里定义的,在整个函数中它们都是有定义的。
例如:
复制代码 代码如下:

function test(o){//根据以上的说明:此函数中的i,j,k三个变量的作用域是相同的。
var i = 0; //变量 i 在整个函数中都有定义
if(typeof o == "object"){
var j = 0 ; //变量 j 在整个函数中都有定义,而不仅仅是在 if 语句块
for(var k=0;kdocument.write("
k的值为:"+k);
}
document.write("
for循环外k的值:"+k);//此时的 k 仍然被定义了,k=10
}
document.write("
j的值:"+j); //变量 j 被声明了,但可能没有被初始化 因为可能往函数中 传入的参数 不是对象 ,if语句块不会执行
}

下面通过两种方式调用此函数:
方式一:传入对象
test({});//输出结果:上例中的注释
方式二:什么都不传
test();//输出结果:j的值:undefined
想不明白的是,在第二种方式中的输出结果,为什么会是 undefined。我当时猜的是:j的值:0
后来,这本书上面说:
由于局部变量在整个函数体内都是有声明(或定义)的,这就意味着在整个函数体中都隐藏了同名的全局
变量。虽然 局部变量在整个函数体内中都是有声明(或定义)的,但是在执行var语句之前,它是不会被初始化的。
这样的话,上面的方式二调用的输出结果,就比较好解释了,由于变量j在整个函数中都有定义,而又由于传入函数的参数为空,所以函数体中的if语句不会执行,从而使得j的值为undefined.(这是我参照上面书上说的那句话的理解)
下面的例子,更好的说明:
复制代码 代码如下:

var sssss = "全局变量";
function f(){
document.write("
"+sssss);//输出:undefined 而不是输出"全局变量"
var sssss = "局部变量";
document.write("
"+sssss);//输出:局部变量
}
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah skop pembolehubah fungsi PHP ditentukan? Bagaimanakah skop pembolehubah fungsi PHP ditentukan? Apr 16, 2024 pm 04:51 PM

Skop pembolehubah dalam PHP dibahagikan kepada tempatan (dalam fungsi), global (boleh diakses dalam program), dan skop kelas (boleh diakses dalam contoh kelas). Kata kunci global boleh mengisytiharkan pembolehubah tempatan sebagai pembolehubah global, dan kata kunci statik boleh mengisytiharkan pembolehubah tempatan sebagai pembolehubah statik, mengekalkan nilainya di antara panggilan fungsi.

Pemahaman mendalam tentang kitaran hayat fungsi Golang dan skop pembolehubah Pemahaman mendalam tentang kitaran hayat fungsi Golang dan skop pembolehubah Apr 19, 2024 am 11:42 AM

Dalam Go, kitaran hayat fungsi termasuk definisi, pemuatan, pemautan, pemulaan, panggilan dan skop pembolehubah dibahagikan kepada tahap fungsi dan tahap blok Pembolehubah dalam fungsi boleh dilihat secara dalaman, manakala pembolehubah dalam blok hanya kelihatan dalam blok .

Skop pembolehubah dan kitaran hayat dalam bahasa Go Skop pembolehubah dan kitaran hayat dalam bahasa Go Jun 01, 2023 pm 12:31 PM

Bahasa Go ialah bahasa taip statik sumber terbuka Ia mempunyai ciri-ciri kesederhanaan, kecekapan dan kebolehpercayaan, dan semakin digemari oleh pembangun. Dalam bahasa Go, pembolehubah ialah bentuk penyimpanan data yang paling asas dalam program Skop dan kitaran hayat pembolehubah adalah sangat penting untuk ketepatan dan kecekapan program. Skop pembolehubah merujuk kepada keterlihatan dan kebolehcapaian pembolehubah, iaitu di mana pembolehubah boleh diakses. Dalam bahasa Go, skop pembolehubah dibahagikan kepada pembolehubah global dan pembolehubah tempatan. Pembolehubah global ialah pembolehubah yang ditakrifkan di luar fungsi dan boleh digunakan di mana-mana dalam keseluruhan program

Skop pembolehubah PHP 5.6: Bagaimana untuk menentukan pembolehubah statik menggunakan kata kunci statik Skop pembolehubah PHP 5.6: Bagaimana untuk menentukan pembolehubah statik menggunakan kata kunci statik Jul 30, 2023 pm 11:02 PM

Skop pembolehubah PHP5.6: Cara menggunakan kata kunci statik untuk menentukan pembolehubah statik Dalam PHP, skop pembolehubah menentukan keterlihatan dan skop akses pembolehubah. Pembolehubah statik ialah jenis pembolehubah khas yang mengekalkan nilainya tidak berubah antara panggilan fungsi. Dalam PHP5.6 dan ke atas, anda boleh menggunakan kata kunci statik untuk menentukan pembolehubah statik di dalam fungsi dan kaedah kelas. Ciri-ciri pembolehubah statik ialah: skop pembolehubah statik terhad kepada fungsi atau kaedah di mana ia diisytiharkan. Pembolehubah statik digunakan antara fungsi atau panggilan kaedah

Bagaimana untuk menentukan skop pembolehubah dalam fungsi Golang? Bagaimana untuk menentukan skop pembolehubah dalam fungsi Golang? Apr 11, 2024 pm 12:27 PM

Dalam Go, skop fungsi mengehadkan keterlihatan pembolehubah kepada fungsi di mana pembolehubah diisytiharkan: Isytiharkan pembolehubah dalam fungsi: varnametype=value Skop dihadkan kepada blok kod yang diisytiharkan dan fungsi lain atau blok bersarang tidak boleh mengakses pembolehubah ini.

Cara menggunakan pembolehubah dalam PHP Cara menggunakan pembolehubah dalam PHP May 20, 2023 pm 02:33 PM

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

Apakah skop pembolehubah fungsi Golang Apakah skop pembolehubah fungsi Golang Dec 22, 2023 pm 02:39 PM

Skop pembolehubah fungsi Golang merujuk kepada keterlihatan dan kitaran hayat pembolehubah di dalam fungsi. Mengikut kedudukan dan skop pembolehubah dalam fungsi, pembolehubah boleh dibahagikan kepada tiga jenis: pembolehubah tempatan, pembolehubah parameter dan pembolehubah nilai pulangan. Pengenalan terperinci: 1. Pembolehubah setempat ialah pembolehubah yang ditakrifkan di dalam fungsi dan hanya boleh digunakan di dalam fungsi. Skopnya terhad kepada di dalam fungsi, termasuk semua blok kod dan blok kod bersarang bagi fungsi; parameter input yang diterima oleh fungsi dan boleh digunakan di dalam fungsi Skopnya terhad kepada bahagian dalam fungsi, dsb.

Cara menggunakan pembolehubah superglobal dalam PHP Cara menggunakan pembolehubah superglobal dalam PHP May 20, 2023 pm 07:01 PM

Pembolehubah superglobal dalam PHP merujuk kepada pembolehubah yang boleh diakses dalam skop global Setiap pembolehubah superglobal ialah tatasusunan bersekutu, yang mengandungi banyak pembolehubah yang telah ditetapkan dalam PHP, seperti $_GET, $_POST, $_COOKIE, dsb. tunggu. Pembolehubah superglobal ini sangat penting dalam pembangunan web kerana ia menyediakan cara penting untuk mendapatkan maklumat daripada permintaan pengguna, seperti mendapatkan data borang, mendapatkan parameter URL, dsb. Artikel ini akan memperkenalkan secara terperinci pembolehubah superglobal yang biasa digunakan dalam PHP, termasuk fungsinya dan cara menggunakannya.

See all articles