标签:window 内存 name 灵活 作用域链 ota turn ntb 就会
函数:就是一个可以反复执行的代码块
为什么使用函数:
创建一个函数:
function 函数名(){ //函数体 }
函数名() //函数调用
调用函数:
函数返回值:
function sum(){ var total = 1+3; return total; //返回的是total代表的值 console.log(total);//这个代码不会运行 } var n = sum(); //n = 4
函数参数:
function sum(n,m){ //函数定义同时定义形参,相当于声明了两个变量 var total = n+m; return total; } var t = sum(100,200);//调用函数时传递实参 console.log(t);
封装获取元素样式的函数:
function getCss(ele,attr){ return ele.currentStyle==="undefined" ? getCoumputedStyle(ele)[attr] : ele.currentStyle[attr]; } getCss(box,‘width‘);
arguments是函数中内置的一个对象,表示的是实参的集合:
function fn(){ console.log(arguments); } fn(1); //arguments [1] fn(1,2); // arguments [1,2]
函数的不用形式:
function sum(){ } sum();
//事件处理函数,一般使用的是匿名函数 box.onclick = function(){ } //如果事件绑定使用的是命名函数,不能加(),不能传参 box.onclick = fn; //如果命名函数需要传参,需要放在匿名函数里面 box.onclick = function(){ fn(‘hello‘); }
var obj = { name:‘ujiuye‘, age:18, eat:function(){ //eat方法 console.log(‘吃面条!‘); } } obj.eat();
函数中this的指向问题:
//命名函数(普通函数) function fn(){ console.log(this);// 普通函数里面的this是window } fn();
var oBox = document.getElementById(‘box‘); //事件处理函数,一般使用的是匿名函数 oBox.onclick = function(){ console.log(this); // oBox }
var obj = { name:‘ujiuye‘, age:18, eat:function(){ //eat方法 console.log(this); } } obj.eat(); // obj
全局作用域&私有作用域:
全局变量&局部变量:
什么是作用域链?
函数中是使用变量,从当前作用域里开始查找,如果没有向上一级作用域查找,如果还没有会继续向上查找,直到查到全局作用域,如果还没有,就会报错。(子可以找父,父不可以找子)
什么是预解析(变量提声)?
普通函数和表达式声明的函数有什么区别:
fn1();//因为函数在预解析时已经被声明并且赋值,所以可以在再函数定义之前调用 function fn1(){ } fn2(); // 因为函数写在等号后面不会被预解析,所以这种方式不能再函数定义之前调用 var fn2 = function(){ }
标签:window 内存 name 灵活 作用域链 ota turn ntb 就会
原文地址:https://www.cnblogs.com/musong-out/p/11391680.html