JavaScript学习之路06_函数

来源:互联网 发布:mac如何缩小照片kb 编辑:程序博客网 时间:2024/05/21 14:29

函数是一种语言必不可少的,函数也是很灵活的,面向过程语言,例如C,它的基本单位就是函数,但是面向对象的语言,基本单位是类,但是函数还是解决方法必不可少的,他是对一种问题的抽象,例如1+2+3…..+100,数学中使用∑,它代表了对这种逻辑的抽象表示,函数也使一样,是对相同功能的一个提炼,也是对一种功能的抽象。
和之前一样,也是从知识点入手,代码如下:

//定义一个函数,这里面是局部变量,如果直接调用,会提示ReferenceError,未定义function foo(){    var x = 1;     x += 2;} console.log(x);VM271:2 Uncaught ReferenceError: x is not defined(…)//基本上相同的问题function foo(){     var x = 1;     function inner(){         var y = x + 2;    } }console.log(y);//变量的搜索顺序,从内到外,如果一直没有,提示undefinedfunction foo() {    var x = 1;    function bar() {        var x = 'A';        alert('x in bar() = ' + x); // 'A'    }    alert('x in foo() = ' + x); // 1    bar();}//定义在函数内的是局部变量function foo(){     var x = 1;      alert(x);}//这里要特别注意的一点//在JavaScript函数中,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:function foo(){     var x = 'hello,'+y;     alert(x);     var y = 'bob';}foo();//输出结果是 hello,undefined//为什么呢?上面代码和下面代码相同:Javascript会先扫描整个函数体,将定义的变量全部提到上面,但是y在使用的时候还没有赋值,所以这时候y还是undefinedfunction foo(){     var y;    var x = 'hello,'+y;     alert(x);     y = 'bob';}//全局变量windowvar course = "hello.cheng";alert(course);//hello.cheng//使用windowalert(window.course);//hello.cheng//因为course是全局变量,所以使用其本身和window都是没有错的,只不过在正常情况下会将window省略function foo(){    var course='hello';     alert(course);     alert(window.course);}foo();//hello//hello这里会调用之前的全局变量function fo(){    var cours='hello';     alert(cours);     alert(window.cours);}fo();//hello//undefined//alertwindow.alert('alert也是一个全局变量');//alert也是一个全局变量var old_alert = window.alert;old_alert('这也是正确的');//这也是正确的old_alert = function(){}old_alert('打印为空'); //undefinedold_alert = window.alert;window.alert = function(){}(){}window.alert('这样是不对的');//undefinedwindow.alert = old_alert;window.alert('alert的功能又回来了');//alert的功能又回来了名字空间,减少因为同名而带来的冲突//定义一个全局变量var MAPPER= {};//设置name属性MAPPER.name = 'myname';//设置version属性MAPPER.version = 1.0;//设置其它函数MAPPER.foo =function(){ console.log('foo函数');}//调用函数MAPPER.foo();//foo函数//调用属性,都是全局变量MAPPER.name;"myname"//作用域,这是因为var的作用域是整个函数,对于这种块级的不太合适function foo(){     for(var i=0; i<100; i++){}     console.log(i);//101}//块级作用域function foo(){    for(let i = 0; i<100; i++){}     console.log(i);//SyntaxError: Block-scoped       declarations }//定义常量//const也是和let一样的作用域是块级作用域const PI = 3.14;PI = 3;3console.log(PI);//3.14
0 0