JavaScript 函数与变量的几种特殊情况

来源:互联网 发布:匡恩网络 内部融资 编辑:程序博客网 时间:2024/06/01 09:39

函数与变量的几种特殊情况

1、变量的问题
在函数作用域中,定义局部变量,不使用 var 关键字,自动提升为全局变量。

相关代码:function fn(){   //定义局部变量-->不建议使用   str = "this is text";   console.log(str);//this is text}fn();//在全局作用域中,该变量是全局变量console.log(str);//this is text

2、变量的声明提前

console.log(str);
var str=’this is text’;
console.log(str);
等价于:
var str;
console.log(str);
str = “this is text”;
console.log(str);

相关代码:function fn(){    console.log(str);     //undefined    var str="this is text";    console.log(str);    //this is text}fn();

3、按值传递
函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。

相关代码:第一种://定义全局变量var num=100;//函数的形参function fn(num){    console.log(num);   //100    num=num-10;    console.log(num);   //90}//函数的实参-->对应全局变量fn(num);console.log(num);      //100第二种:var num=100;//函数的形参-->函数体中改变的都是形参的值,与全局变量无关function fn(){    console.log(num); //100    num=num-10;    console.log(num);//90}fn(num);console.log(num);    //90

4、全局变量与局部变量同名
全局变量与局部变量同名时,在函数作用域中只能找到局部变量。

相关代码://定义全局变量var str="this is text";function fn(){   console.log(str);     //undefined   var str = "this is Function";   console.log(str);     //this is function}fn();console.log(str);         //this is textvar str ="this is text"function fn (){    console.log(str);    str="this is function";    console.log(str);}fn();console.log(str);

5、就近原则

相关代码:var str="this is text";function fn(){   console.log(str);   //1.全局变量    var str ="this is function";   console.log(num);   //1.全局变量  2.局部变量 3、形参}fn();

6、形参与局部变量
利用形参初始化局部变量

相关代码://定义全局变量var num=100;//定义全局函数function fn(str){   console.log(num);//当有形参时,输出的是100;当没有形参时,输出的是undefined   //局部变量   var num=num;   console.log(num);//100   //局部变量   num=num-10;   console.log(num);//90}fn(str);

变量的问题:
当变量名与函数名相同时,会出现函数覆盖变量。

这里写代码片var num=100var num=function(num){    console.log(num);  //[Function:num]    num=num-10;    console.log(num); //NaN    var num=num;      //局部变量    console.log(num); //NaN    return num;      //返回值,局部变量}var num=num(num);    //实参 --> 函数覆盖变量console.log(num);    //NaN