例1:
var a = 10;
function test(a) {
a -= 3;
}
test(a);
console.log(a);
<!-- test(a)是带参数进入函数的,但是在函数里没有return a,且没有把a重新赋值a=test(a),所以下面打印a依然为10。
如若以带参数执行函数且想拿到改变后的a,需在函数中添加return a;test(a)改为a=test(a); -->
例2:
var a = 10;
function test() {
a -= 3;
}
test();
console.log(a);
<!-- 这种情况未带参数进入,在函数中执行改变的直接是全局变量,不需要return和重新赋值就改变了全局的值 -->
例3:
function fn1() {
alert(1);
}
alert(fn1()); //1 undefined;
<!-- 首先执行fn1,打印了1,随后执行了alert(fn1()),由于fn1没有return返回值,所以alert弹出的fn1()执行结果为undefined -->
例4:
for (var i = 0; i < 10; i++) {}
document.write(i); //10
例5:
var num1 = 1;
function testf1() {
num1 = 2;
var num1;
alert(num1);
}
function testf2() {
alert(num1);
}
testf1();//2
testf2();//1
<!--
在函数里的变量,只要加了var,无论是在变量赋值之前还是之后执行,都相当于最先执行。相当于var了一个局部变量。
所以在testf1里改变的只是局部变量,全局变量不变。
-->
例6:
对象添加属性名为name的方式错误的是 B 因为b选项括号里是一个变量,未对变量name赋值。
A. obj.name = “张三”; B. obj[name] = “张三”;
C.obj[“name”] = “张三”; D. obj[“na”+”me”] = “张三”;
例7:
var x = 0;
var f = function () {
x = 1;
};
f();
console.log(x); //1
function f() {
x = 2;
}
f();
console.log(x); //1
<!--
两次打印出来的都为1,涉及到函数的两种创建方法。普通函数的创建是在执行到script脚本的时候就进入堆中,但是匿名函数创建时,只有执行到匿名函数时,函数才会进入到堆中。
该题下面创建出的函数被上面匿名函数创建时所覆盖,所以两次f()执行时都是执行的匿名函数。且匿名函数中没有定义变量,改变了全局变量。
-->
例8:
var a=0;
var b = ( a++, a++ +a ); //(0,1+2)
console.log(a,b); //2 3
细节:
var _myName = 12a 该命名变量有误,12a是字符串,不是纯数字,字符串要用引号
document.write(num++); 在未定义num的时候,给dom写入num++ 会显示出NaN
var obj = {[ ]} 这种创建对象的方法会报错
var obj = [{}] 这种创建数组的方法正确
typeof null ===> object
JavaScript基本数据类型 基础类型:字符型,布尔型,数值型,undefined,null 复杂类型:object