<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 繪製如下代碼的做用域鏈: var num = 123; var f = function() {}; var arr = []; // 繪製做用域的規則: // 1 繪製做用域鏈的時候,只繪製在當前做用域中聲明的變量或者函數 // 2 把全局做用域看做是0級別鏈,只繪製在全局中聲明的函數和變量 // 3 若是是在全局做用域中存在一個函數,此時,在這個函數上 // 引出一條新的鏈,此時把這條鏈叫作: 1級別鏈 // 4 若是,在函數內部 又聲明鏈一個函數,而後,這個函數由引出一條新的 // 鏈出來,把這條鏈稱做:2級別鏈 // 5 以此類推,只到n級別的鏈 // 變量搜索原則: // 從高級別的鏈 到 低級別的鏈,來查找 // 1 首先是在當前鏈(n)中查找有沒有聲明的這個變量,若是由直接使用 // 2 沒有,就去 n-1 級別的鏈中查找有沒有,若是由直接使用 // 3 以此類推,知道 0 級別的鏈,若是有直接使用,若是沒有 // 若是是賦值,此時會建立全局變量 // 若是是讀取,此時會報錯!! // console.log(asdfa); </script> </body> </html>