this、自定义属性、自定义索引、函数、函数的使用、函数的参数、arguments、函数中的问题、函数中的this、作用域

this

  • this可以存储在任意位置,在不同的位置代表不同的对象。代表的是函数调用时函数的拥有者。
  • 全局下的this是window对象
  • 普通函数中,this表示window对象。
  • 在事件处理函数中,this表示触发事件的元素
/*
this可以存储在任意位置,在不同的位置代表不同的对象。
*/
// 全局下的this是window对象
console.log(this);

// 普通函数中,this表示window对象。
function fun () {
    
    
    console.log(this);
}
fun();

// 在事件处理函数中,this表示触发事件的元素
document.onclick = function () {
    
    
    console.log(this);
}

自定义属性

var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
    
    
    // 声明变量记录状态,true表示red,false表示blue,把状态给每个元素上添加,每个元素都有一个自定义属性
    lis[i].tag = false;
    // 添加事件
    lis[i].onclick = function () {
    
    
        // 取出自己身上的tag属性值来判断
        if (this.tag == false) {
    
    
            this.style.background = 'red';
            this.tag = true;
        } else {
    
    
            this.style.background = 'blue';
            this.tag = false;
        }
    }
}

自定义索引

var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
    
    
    // 把下标值作为属性值绑定在每个li上称之为自定义索引
    lis[i].index = i;
    lis[i].onclick = function () {
    
    
        console.log('click');
        // console.log(i); // 7
        // 获取时通过绑定的自定索引获取即可
        console.log(this.index);
    }
}

函数

  • 函数是由事件驱动的或者当它被调用时可以重复使用的代码块。 函数分为:声明和调用。

函数的使用

  • 函数使用 function 声明,语法: function 函数名 () { 代码块 }
  • 函数需要调用才能执行内部的代码,语法: 函数名();
// 声明函数
function fun () {
    
    
    console.log('fun');
}
// 调用函数
fun();
fun();

// 函数表达式
var f = function () {
    
    
    console.log('f');
}
// 函数表达式的调用
f();
f();
  • 函数的使用场景
// 1.事件处理函数
document.onclick = function () {
    
    
    console.log('click');
}

// 2.普通函数
function fun () {
    
    
    console.log('fun');
}
fun();

// 3.对象的方法
var obj = {
    
    
    name: 'lilei',
    age: 18,
    sayhi: function () {
    
    
        console.log('hi');
    }
};
obj.sayhi();

函数的参数

  • 参数分为形参和实参
  • 形参:形式参数,在定义函数时把不确定的值使用变量代替。参数个数没有限制,参数之间使用逗号隔开。
  • 实参:实际参数,在调用函数时在括号内传入确定的值。
  • 参数的类型可以是任意数据类型。由于null和undefined作为参数没有意义并且容易出错,一般不使用null和undefined作为参数。
// 参数分为形参和实参
// 形参:形式参数,在定义函数时把不确定的值使用变量代替。
// 实参:实际参数,在调用函数时在括号内传入确定的值。
// 参数的类型可以是任意数据类型。由于null和undefined作为参数没有意义并且容易出错,一般不使用null和undefined作为参数。
function add(a, b) {
    
    
    var sum = 0;
    for (var i = a; i <= b; i++) {
    
    
        sum += i;
    }
    console.log(sum);
}
add(1, 100);
add(100, 200);

arguments

  • arguments会接受所有的参数,是类数组对象。
function fun (a, b) {
    
    
    console.log(a, b);
    console.log(arguments);
    console.log(arguments[0]);
    console.log(arguments[1]);
    console.log(arguments.length);
}
fun(10, 20);

函数中的问题

// 函数不能重名,会覆盖
// function add (a, b) {
    
    
//     console.log('这是a,b');
//     console.log(a + b);
// }
// function add (a, b, c) {
    
    
//     console.log('这是a,b,c');
//     console.log(a + b + c);
// }
// add(10, 20)

// 当形参和实参个数不一致时
function add (a, b) {
    
    
    console.log(a, b);
    console.log(a + b);
    console.log(arguments);
}
add(10, 20); // 30 形参和实参个数一致,依次赋值
add(10); // 10+undefined:NaN 实参个数小于形参,从左到右依次赋值,没有赋值的形参为undefined
add(10, 20, 30); // 实参个数大于形参,从左到右依次赋值,所有的实参都会存在arguments中

函数中的this

// 普通函数中的this是window
function fun () {
    
    
    console.log(this);
}
fun(); // window

// 事件处理函数中,this是触发事件的对象
// document.onclick = function () {
    
    
//     console.log(this);
// }
document.onclick = fun;

// 对象的方法中this是对象本身
var obj = {
    
    
    name: 'lilei',
    age: 18,
    // sayhi: function () {
    
    
    //     console.log(this);
    // }
    sayhi: fun
};
obj.sayhi();

作用域

  • 作用域:变量或者函数的有效使用范围。

  • 作用域分为:局部作用域全局作用域

  • 局部作用域:声明在函数中的变量或者函数,只能在该函数中有定义,出了函数就不能使用了。

  • 全局作用域:声明在全局中的变量或者函数,在全局都有定义(可以使用和修改)。

  • 作用域链:作用域链是JavaScript中的查找机制,当使用变量或者函数时会优先在当前的作用域中查找,如果找到就直接使用;如果找不到就往上一级作用域中查找,直到全局作用域为止,如果全局作用域也找不到,就报错:xx is not defined。

// 作用域链:作用域链是JavaScript中的查找机制,当使用变量或者函数时会优先在当前的作用域中查找,如果找到就直接使用;如果找不到就往上一级作用域中查找,直到全局作用域为止,如果全局作用域也找不到,就报错:xx is not defined。
var a = 10;
var b = 20;
console.log(a); // 10

function fun () {
    
    
    console.log(a); // 10
    var b = 30;
    
    function inner () {
    
    
        console.log(a); // 10
        console.log(b); // 30
        // console.log(c); // 16-作用域链.html:22 Uncaught ReferenceError: c is not defined
    }
    inner();
}
fun();

猜你喜欢

转载自blog.csdn.net/yangyanqin2545/article/details/111238444
今日推荐