<script>
? ? ? ? /console.log(a) ?//undefined??
? ? ? ?var a = 12
? ? ? ? function fn() {
? ? ? ? ? ? console.log(a) ?//undefined
? ? ? ? ? ? var a = 13
? ? ? ? }
? ? ? ? fn()
? ? ? ? console.log(a) ?//12?
? ? ? ? ?console.log(a) ?//undefined
? ? ? ? var a = 12
? ? ? ? function fn() {
? ? ? ? ? ? //注意:當(dāng)前作用域里面沒有a惰赋,就會到上一層作用域里面去尋找a
? ? ? ? ? ? console.log(a) //12
? ? ? ? ? ? a = 13
? ? ? ? }
? ? ? ? fn()
? ? ? ? console.log(a) //13?
? ? ? ? // console.log(a) ?//報錯
? ? ? ? let a = 12 ?//let定義的變量呵恢,不存在提升
? ? ? ? function fn() {
? ? ? ? ? ? // console.log(a) ?//報錯默刚,注意:只要是當(dāng)前作用域里面的存在的變量,就不會去上層作用域找了
? ? ? ? ? ? let a = 13 ?//let定義的變量昧互,不存在提升
? ? ? ? }
? ? ? ? fn()
? ? ? ? console.log(a)?
? ? ? ? // console.log(a) ?//報錯
? ? ? ? a = 12 ? // 定義變量可以不使用任何關(guān)鍵字,但是在定義該變量之前伟桅,不能使用該變量(這是一種不規(guī)范寫法)
? ? ? ? function fn() {
? ? ? ? ? ? // console.log(a) ?//報錯
? ? ? ? ? ? let a = 13
? ? ? ? }
? ? ? ? fn()
? ? ? ? console.log(a)?
? ? ? ? ?var foo = 1
? ? ? ? function bar() {
? ? ? ? ? ? if (!foo) {
? ? ? ? ? ? ? ? var foo = 10 ?//這個foo會提升到當(dāng)前作用域的頂部定義
? ? ? ? ? ? }
? ? ? ? ? ? console.log(foo) ?//10
? ? ? ? }
? ? ? ? bar()?
? ? ? ? var foo = 1
? ? ? ? function bar() {
? ? ? ? ? ? if (!foo) {
? ? ? ? ? ? ? ? foo = 10
? ? ? ? ? ? }
? ? ? ? ? ? console.log(foo) ? //1
? ? ? ? }
? ? ? ? bar()?
? ? ? ? var n = 0
? ? ? ? function a() {
? ? ? ? ? ? var n = 10 ? //11 ? 12
? ? ? ? ? ? function b() {
? ? ? ? ? ? ? ? n++ ?//11 ?12
? ? ? ? ? ? ? ? console.log(n) ?//11 ?12
? ? ? ? ? ? }
? ? ? ? ? ? b()
? ? ? ? ? ? return b
? ? ? ? }
? ? ? ? var c = a()
? ? ? ? c()
? ? ? ? console.log(n) ?// 0?
? ? ? ? var a = 10
? ? ? ? var b = 11
? ? ? ? var c = 12
? ? ? ? function test(a) {
? ? ? ? ? ? a = 1
? ? ? ? ? ? var b = 2 ? //方法里面的作用域b是2
? ? ? ? ? ? c = 3 ?//會將外層作用域的c的值換掉
? ? ? ? }
? ? ? ? test(10)
? ? ? ? console.log(a) ?// 10
? ? ? ? console.log(b) ?// 11
? ? ? ? console.log(c) ?// 3?
? ? ? ? ?// in關(guān)鍵字敞掘,用于檢查一個屬性是否包含在指定的對象中,如果包含就返回true
? ? ? ? if (!('a' in window)) {
? ? ? ? ? ? var a = 10
? ? ? ? }
? ? ? ? console.log(a)?
? ? ? ? var a = 4
? ? ? ? function b(x, y, a) {
? ? ? ? ? ? console.log(a) ?// 打印形參的值 3
? ? ? ? ? ? arguments[2] = 10 ?// 又將形參a改成而來 10
? ? ? ? ? ? console.log(a) ?// 10
? ? ? ? }
? ? ? ? a = b(1, 2, 3) ?//b方法楣铁,沒有返回任何內(nèi)容玖雁,默認(rèn)返回undefined
? ? ? ? console.log(a) ?//undefined?
? ? ? ? ?var a = 9
? ? ? ? function fn() {
? ? ? ? ? ? // 1 2
? ? ? ? ? ? a = 0 ?
? ? ? ? ? ? return function (b) {
? ? ? ? ? ? ? ? // ? ? 5 + 1
? ? ? ? ? ? ? ? // ? ? 5 + 0
? ? ? ? ? ? ? ? return b + a++
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? var f = fn()
? ? ? ? console.log(f(5)) ? //5
? ? ? ? console.log(fn()(5)) ?//5
? ? ? ? console.log(f(5)) ? //6
? ? ? ? console.log(a) //2?
? ? ? ? /* var ary = [1, 2, 3, 4]
? ? ? ? function fn(ary) {
? ? ? ? ? ? ary[0] = 0 ? // 修改了原數(shù)組中第一位的值
? ? ? ? ? ? ary = [0] ? ?// arr形參重新賦值一個新的數(shù)組
? ? ? ? ? ? ary[0] = 100 // 形參arr再修改第一個位置的值,就跟原數(shù)組沒關(guān)系
? ? ? ? ? ? return ary
? ? ? ? }
? ? ? ? var res = fn(ary) ? // [100]
? ? ? ? console.log(ary) ? ?// [0,2,3,4]
? ? ? ? console.log(res) ? // [100] */
? ? ? ? ?// ? ? ? ? ?10->11
? ? ? ? function fn(i) {
? ? ? ? ? ? // ? ? ? ? ? ? ? 30
? ? ? ? ? ? return function (n) {
? ? ? ? ? ? ? ? console.log(n + i++) ?//41
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? var f = fn(10)
? ? ? ? f(20) ? //30
? ? ? ? fn(20)(40) ?//60
? ? ? ? fn(30)(50) ?//80
? ? ? ? f(30) //41?
? ? ? ? var num = 10 ?//60 ?65
? ? ? ? var obj = { num: 20 } ?// 30
? ? ? ? // ? ? ? ? ? ? ? ? ? 20 ?21
? ? ? ? obj.fn = (function (num) {
? ? ? ? ? ? //this->window
? ? ? ? ? ? this.num = num * 3
? ? ? ? ? ? num++ // 21
? ? ? ? ? ? // ? ? ? ? ? ? ? 10
? ? ? ? ? ? return function (n) {
? ? ? ? ? ? ? ? this.num += n ?// 30
? ? ? ? ? ? ? ? num++ ?//22 23
? ? ? ? ? ? ? ? console.log(num) ?//22 23
? ? ? ? ? ? }
? ? ? ? })(obj.num)
? ? ? ? var fn = obj.fn
? ? ? ? console.log(fn) ?//function(n){this.num +=n;num++;console.log(num)}
? ? ? ? fn(5) ?// 22
? ? ? ? obj.fn(10) //23
? ? ? ? console.log(num, obj.num) //65 30?
? ? ? ? var fullName = 'language'
? ? ? ? var obj = {
? ? ? ? ? ? fullName: 'javascript',
? ? ? ? ? ? prop: {
? ? ? ? ? ? ? ? getFullName: function () {
? ? ? ? ? ? ? ? ? ? return this.fullName
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? console.log(obj.prop.getFullName()) ?// undefined
? ? ? ? // 將getFullName方法傳給test
? ? ? ? var test = obj.prop.getFullName
? ? ? ? console.log(test()) ?// language?
? ? ? ? // var定義的變量會成為window的屬性
? ? ? ? var name = 'window'
? ? ? ? var Tom = {
? ? ? ? ? ? name: "tom",
? ? ? ? ? ? show: function () {
? ? ? ? ? ? ? ? console.log(this.name) ?// window
? ? ? ? ? ? },
? ? ? ? ? ? wait: function () {
? ? ? ? ? ? ? ? var fun = this.show
? ? ? ? ? ? ? ? fun()
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? Tom.wait() ?// window
? ? </script>