JS 函数

2020-05-24  本文已影响0人  行走的蛋白质

执行步骤

试题解析

console.log(a)
var a = 12
function fun() {
    console.log(a)
    var a = 13
}
fun()
console.log(a)
// undefined undefined 12
console.log(a)
var a = 12
function fun() {
    console.log(a)
    a = 13
}
fun()
console.log(a)
// undefined undefined 12
var foo = 1
function bar() {
    if(!foo) { // 不管条件是否成立,都会在自己的作用域里面进行变量提升
        var foo = 10
    }
    console.log(foo)
}
bar() // 10
var n = 0
function a() {
    var n = 10
    function b() {
        n++
        console.log(n)
    }
    b()
    return b
}
var c = a()
c() // 里面的变量跟它在哪执行没关系,主要看它在哪儿定义的
console.log(n) // 11 12 0
var a = 4
function b(x, y, a) {
    console.lot(a)
    // 在 JS 非严格模式下,函数的形参和 arguments存在映射机制
    // 即 x 赋值 100 ==> arguments[0] 就等于 100
    arguments[2] = 10
    console.log(a)
}
a = b(1, 2, 3) // a 为 b 的执行结果,b 没有 return 所以 a = undefined
console.log(a) // 3 10 undefined
function fun(x, y) {
    var arg = arguments
    arg[0] = 100
    console.log(x)
    y = 200
    console.log(arg[1])
}
fun(10) // 100 undefined
// JS 非严格模式下形参和 arguments 有映射关系 ==> arg[0] 改变影响 x 的值
// 传入参数没有 y,所以 arguments 的 length 为 1,只有一个值无法与 y 进行映射,所以 arg[1] 为 undefined
var foo = 'hello'
(function(foo){
    console.log(foo)
    var foo = foo || 'world' // 变量提升,私有作用域中已经有的变量则不会进行提升
    console.log(foo)
})(foo)
console.log(foo) // 'hello' 'hello' 'hello'
var a = 9
function fun() {
    a = 0
    return function(b) {
        return b+a++
    }
}
var f = fun()
console.log(f(5))
console.log(fun()(5))
console.log(f(5))
console.log(a) // 5 5 6 2 画图解决
var ary = [1, 2, 3, 4]
function fun(ary) {
    ary[0] = 0
    ary = [0]
    ary[0] = 100
    return ary
}
var res = fun(ary)
console.log(ary) // [0, 2, 3, 4]
console.log(res) // [100]
function fun(i) {
    return function(n) {
        console.log(n + i++)
    }
}
var f = fun(10)
f(20) // 30
fun(20)(40) // 60 会开辟新的私有空间进行函数运算
fun(30)(50) // 80
f(30) // 41 在第一次执行的 fun 里面拿变量
var num = 10
var obj = {num: 20}
obj.fn = (function(num) {
    this.num = num * 3
    num++
    return function(n) {
        this.num += n
        num++
        console.log(num)
    }
})(obj.num)
var fn = obj.fn
fn(5)
obj.fn(10)
console.log(num, obj.num) // 22 23 65 30

珠峰免费视频请戳这里。。。

上一篇 下一篇

猜你喜欢

热点阅读