Web前端之JavaScript基础语法部分

部分与编译型语言有区别的语法

数据类型

NaN:表示不是数字
undefined:未初始化

表达式:
==:不严格的判等 “10” == 10 true
===:严格的判等 “10”===10 false
!==
!===

分支结构

switch 语句中 用的是严格的判等


数组

声明方式:

 var array  = new Array();  // 空数组
 var array  = new Array(10);  // 内容为undefined
 var array  = new array(10,20,30); //number数组
 var array = []; //空数组
 var array = [10,20,30]; //number数组

数组长度可以改变

 var array = []; //声明一个空数组
 var array[0] = 10; //往里面添加元素
 var array[1] = 20;
 console.log(array.length) //数组长度改变

函数

  1. 定义
//声明
function fun(){
}
//参数不需要声明类型(没法声明类型)
function fun(x,y){
}
//如果没有返回值或return; 则会得到一个undefined
console.log(fun(1,2)); 
  1. arguments对象
    arguments就是参数列表的数组(伪数组)
function fun(){
	//此操作可以显示传入的参数长度,即使函数参数列表没有声明。
	console.log(arguments.length);
	console.log(arguments);//打印参数列表的值
}
fun(1,2,3);
  1. 命名函数与匿名函数
var fun = function () {
}
这种方式叫函数表达式

普通同名函数,后定义的函数会覆盖前面的函数,而函数表达式和变量赋值类似。
4. 函数自调用

(function () {
          console.log("aaaa")
})();
  1. 函数作为参数使用:
 function f1(f2) {
         f2();
         console.log("bbbb");
     }

function f2() {
        console.log("aaaa");
    }
f1(f2);
  1. 函数作为返回值使用
 function f1() {
        return function () {
            console.log("aaaa");
        }
     }
var ff = f1();

ff();

总结:
函数名的本质就是函数体。
函数的数据类型是function。


JS中的作用域

  1. 两个script标签可以使用一个变量
    ** js里没有块级作用域
    只有函数中声明的吧变量是局部变量,其他任何位置声明的变量都是全局变量。
<script>
    var num = 1;
</script>
<script>
    alert(num); //1
</script>
  1. 隐式全局变量
function f() {
    num = 10; //不用var声明.
    delete num;  
}
//可以访问到函数内的变量,因此此函数不会被释放内存
console.log(num);

//delete 关键字可以删除隐式全局变量
delete num;
//但无法删除var声明的变量

JS中的预解析

js代码会预先声明变量,只要变量被声明,无论变量在什么位置,解释器会提前声明,
函数会调整顺序,无论函数体在什么位置,只要有这个函数,就能被整确调用。

注意

var num = 1;
function f1() {
	  //隐式的var num;
      console.log(num);  //此结果仍然是undefined 因为js会预解析
      var num = 20;
}
f1();

f1();
var num = 1; //函数会被提前,这个变量的声明也会提升到变量使用之前
function f1() {
     console.log(num);  //此结果仍然是undefined
}

function f1() {
      console.log(num);  //此结果仍然是undefined
      var num = 1;
}
f1();
console.log(num);  //报错、提升只会在作用域里面进行

//多个标签预解析不冲突(各标签各玩各的)
<script>
    f1(); //aaaa

    function f() {
        console.log("aaaa"); 
    }
</script>
<script>
    f1(); //bbbb

    function f() {
        console.log("bbbb");
    }
</script>

console.log(a); // a的函数体
function a() {
    console.log("123");
}
var a = 10;
console.log(a); //10;

//提升时,总是变量在前,函数在后进行提升
```
发布了51 篇原创文章 · 获赞 20 · 访问量 1535

猜你喜欢

转载自blog.csdn.net/qq_39711439/article/details/102831100