在 JavaScript 中,变量声明和函数声明会被引擎隐式地提升到当前作用域的顶部。
如:
输出的结果会是:undefined. 而不是 1。
这就是因为变量 b 的声明被提前了,typeof 操作符操作的变量不是全局变量 b;而是待赋值的局部变量 b。
同理,函数的声明也如此:
但是直接定义的话就不会为 undefined。
附上两道据说2014年阿狸笔试题:
在 JavaScript 中,变量声明和函数声明会被引擎隐式地提升到当前作用域的顶部。
如:
输出的结果会是:undefined. 而不是 1。
这就是因为变量 b 的声明被提前了,typeof 操作符操作的变量不是全局变量 b;而是待赋值的局部变量 b。
同理,函数的声明也如此:
但是直接定义的话就不会为 undefined。
附上两道据说2014年阿狸笔试题:
由于毕业设计想尝试着使用 Node.js 来做一个应用,因此便接触了 Express 这个已有的 Web 开发框架。
有了 Express 这个框架,就可以省去自己手动实现小到一个 POST 请求,大到 Cookie、会话的管理的精力,避免了重复造轮子。
|
app 对象一般情况下都是指向 Express 应用,通过调用 Express 模块的 express() 方法创建
app 对象配有一些成员方法:
app.set 是 Express 的参数设置工具,接受一个 key 和一个 value
可用的参数有:
|
app.get 可以获取 setting 里 key 对应的 value
eg: app.get(‘/‘,routes.index); 是一个路由控制器,用户如果访问“/”路径,则由 routes.index 来控制
app.use 用来启用大量的中间件
(在 Express3.X 时依赖于 Connect)
(而在4.X开始,除了 Static 其余则被分离成独立的模块,需要单独安装,使用 require 调用)
hexo 有两个新建文件的命令,一个是 hexo new +文件名;另一个是 hexo new page +路径名
通过第二种方式,我们可以在 source 里新建一个目录,不同一般的文章,而是有一个新的页面,供我们访问,如 localhost:4000/about
但通过这种方法生成的页面 index.md,也会在 hexo g 的时候,被默认套用了配置模板。
那有没有办法可以使这个页面不会依赖于模板呢?答案是有的。
在 index.md 文件头加上这么一句,就可以解决: “layout: false“
如:
这样就大功告成了。
然而并不是。
命令 hexo new page 只是新建一个页面。但它仍然是通过编译,将 md 文件编译成 html 文件。而属性 layout: false 的作用是,让 md 文件不套用网页模版。
真正要实现可以自己写静态网页放在博客上,要自己动手写 html、css、js 文件的话,就要利用 hexo 的配置属性:skip_render 。这个属性可以在编译时跳过某些目录,hexo 会直接把这个目录原封不动地放到 public/ 去。
P.s. 这个属性的文件匹配有多种形式:
|
这样,就真的大功告成了~
看我个人博客的 Demo 页。
使用 AngularJS,最重要的特点之一,就是它的数据绑定了。
在 AJS 中,经常需要将给定的变量或者表达式,来添加在某个 html 元素内,这个时候经常用到的就是 ng-bind 和双括号(hexo不允许使用半角的花括号,因此只能用中文或者是全角符号了)了,如:
在这个例子中,两个 p 元素都能在浏览器上显示 str 的内容。这也就是数据绑定的实现。
尽管 ng-bind 和双括号的作用是一致的,但是两者仍然有一些区别。在两者之中,也更推荐使用 ng-bind。
所谓的“可见性”,就是指,在打开页面时,页面内会展现出 AJS 的变量或者表达式。
这是因为此时 HTML 内容已经加载完成,但 Angular 脚本尚未加载完成,因此还没有替换掉 HTML 中的双括号注释。
事实上这个也是我在刚开始学习开发 Angular App 时遇到的问题。
这个问题可以通过使用 ng-bind 来解决,这也是利用了 ng-bind 和双括号在可见性的区别。
使用双括号时,HTML 加载时,会将这个注释视为字符串,直接打印出来;而使用 ng-bind 的时候,因为 ng-bind 是作为 HTML 元素的属性,因此对于用户是不可见的,因此不会将变量或者表达式暴露出来。
p.s. 对于这个现象,还有另外一个解决方案,就是使用 ng-cloak,配合 css 的属性选择器,在 Angular 脚本加载完成前,将带有 ng-cloak 指令的节点隐藏掉,即:
但是这个方法美中不足的在于,angular 加载完成之前,添加了这个指令的元素会处于空白状态,特别的,加在 body 时,会出现白屏状态。
并不是只因为使用双括号会暴露表达式就推荐使用 ng-bind 的。更重要的是两者在性能方面上的差异。
事实上,使用双括号,速度相对较慢。(这里是指数据较多的情况,下同)
造成性能差异的原因是:
首先对于双括号来说,angular 会在每次 $digest 循环时对花括号内的变量进行检查,并且将变量的值重新输出到 HTML 中;
而对于 ng-bind 这个指令来说,它会被放置一个 watcher 监听器,只有当监听器监听到它绑定的变量的值发生变化时,ng-bind 才会应用,更新绑定变量的值
引用 stackoverflow 里一位叫 Konstantin Krass 的朋友的尝试:
I am currently building a big single page app (~500 bindings per view). Changing from {{}} to strict ng-bind did save us about 20% in every scope.$digest.
在 Edge 浏览器下,对于 input[type=”text”] 来说,当在输入框里输入内容时,输入框右边会出现一个“×”号,点击之后可以清除掉该 input 里的所有内容。这个按钮有时对用户来说是比较方便的。但有时,我们可能不需要这个按钮,或者是我们需要自己定制一个符合指定样式和功能的按钮,因此这时候就需要将浏览器自带的隐藏掉
|
同样,有时候并不需要使用到 input[type=”password”] 的小眼睛(通过点击可以看到密码的内容),因此隐藏的方法如下:
|