入门和进阶涉及的都不多,多写写项目你就发现好多就自然而然的通了
作用域中没找到该变量
你没有使用'use strict'吧
有的浏览器不支持严格模式,当然严格好啊
可以消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
严格模式需要给浏览器设置下吧,试了下这个代码在谷歌浏览器会报错,在火狐和360极速浏览器就不会
新编写的语言可以在以前的程序上运行
console.log(typeof(evalVal))?
<noscript><div</noscript> 这个是在浏览器不支持或者关闭了对js的支持的时候执行的代码
! function (){}(1) 表示该函数是一个函数表达式而不是函数声明,后面的(1)是将参数1传递进去,前面的!,你可以理解成它是将函数声明转化成函数表达式的一种方法。
!function (){}(1)也等同于(function (){})(1);,!也可换成+、-这样的一元运算符,都可以起到相同的作用。
函数也是一种对象,arguments是它的一个属性,函数的属性还包括name,length等等。
因为定义函数的调用方式应该是 function(),但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。而使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
那那个(1)的意思就很好理解了。等于var func = function(a){}; func(1);.
赋值给“未”声明的变量报错
啥问题?
取反是优先级非常高的运算符。当浏览器扫描到"!"后,会去运算之后的语句,从而达到函数自执行的效果,等同于:(function(){console.log(1);}());这样的自执行函数写法。
而函数是一定有返回值的,只是没有去获取他。若函数里没有写return,就会默认返回一个值:undefined,获取undefined,那么!function(){'use strict';var obj = {x:1,x:2};}(); 就是 !undefined 了,也就是true。
立即执行 , 前面可以是+, 常见的(function(){})();
function是函数声明,在后面加()表示立即执行,由于JavaScript中function的{}后接上()会有语法错误,所以需要把function先变成函数表达式,!就是把function变成函数表达式
w3cschool上有大量题目
哈哈,要注意半角全角括号逗号
楼上已解答
告诉浏览器自动运行这个匿名函数
hi, 亲,意思是'use strict';指令并不一定要在第一行出现的,之前也可以有其它指令(字符串)。
但是不允许有其它语句,如变量声明、赋值等。
例如下面例子中:
上面的use strict前面有abc,仍将进入严格模式,下面的不会进入严格模式。
!function() { 'abc'; 'use strict'; console.log(this === undefined ? "strict" : "not strict"); }();
!function() { var a; 'use strict'; console.log(this === undefined ? "strict" : "not strict"); }();