尤雨溪

尤雨溪 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

尤雨溪 回答了问题 · 2016-02-27

解决使用vue-cli搭建的项目如何在index.html里引入静态css和js?

思路错了。用 webpack 的时候,尽量把资源看做模块依赖...

安装 sass-loader 以后,在 src/App.vue 里面加上:

<style data-original="./assets/mobileCommon.scss" lang="sass"></style>

不需要额外编译这些 sass 了,而且生产构建时自动会合并到一个 css 文件里。

关注 15 回答 4

尤雨溪 回答了问题 · 2014-01-16

为什么 Bootstrap 的 js 源码不写分号?

关于分号问题的详解,请看这个知乎问题的答案:http://www.zhihu.com/question/20298345

我个人已经不写分号一年多了,代码看着舒爽。但这主要还是个人偏好。

关注 1 回答 10

尤雨溪 回答了问题 · 2013-12-31

解决node.js 中 function *(next){} 用法?

注:以下代码示例均需要 node.js v0.11.7+ 带 --harmony 参数才能运行。

这是ES6的新feature,function 后面带 * 的叫做generator。
在generator内部你可以使用 yield 语句:

function* genFunc () {
    console.log('step 1')
    yield 1
    console.log('step 2')
    yield 2
    console.log('step 3')
    return 3
}

当你调用一个generator函数的时候,你会获得一个iterator对象。

var gen = genFunc()

这个对象有一个方法叫做 next()。每当你调用 next() 的时候,generator函数内部就会执行直到遇到下一个 yield 语句,然后暂停在那里,并返回一个对象。这个对象含有被 yield 的值和generator函数的运行状态。

var ret = gen.next() // 输出: 'step 1'
console.log(ret.value) // 1
console.log(ret.done) // false

可以看到,只输出了 'step 1'。这意味着直到你运行下一次 next() 之前,generator内部的状态处于暂停之中,但是却不影响generator外部的代码继续运行。

ret = gen.next() // 输出 'step 2'
console.log(ret.value) // 2
console.log(ret.done) // false

直到generator函数内部不再有 yield 语句存在了,这时你再调用 next(),获得的就会是该函数的常规返回值 (return 的值):

ret = gen.next() // 输出 'step 3'
console.log(ret.value) // 3
console.log(ret.done) // true

同时,iterator对象的 next() 方法是可以传递一个参数的。这个参数将会成为generator函数内对应 yield 语句的返回值:

function* genFunc () {
    var result = yield 1
    console.log(result)
}
var gen = genFunc()
gen.next() // 此时generator内部执行到 yield 1 并暂停,但还未对result赋值!
// 即使异步也可以!
setTimeout(function () {
    gen.next(123) // 给result赋值并继续执行,输出: 123
}, 1000)

虽然本意是用来提供一个可循环对象,但可以看到,generator函数可以借助 yield在需要的时候才继续执行剩余的语句,并且传递回一个值。这让你想到了什么?没错,回调函数!更关键的是,借助generator我们可以用同步的逻辑来表达异步的流程,而不需要嵌套回调。我们只需要对创建iterator对象、调用next()以及外部函数做一些适当的封装和修改,就可以获得无回调的异步流程控制

这个理念由TJ大神(同时也是 Koa 的作者)在 co 这个库里实现了,而 Koa 本身也是基于 co 来封装中间件函数(每一个中间件函数都是generator)。co 的实现其实不过300行代码,但是包含了很精髓的一些东西,值得细看。

关注 8 回答 5

尤雨溪 回答了问题 · 2013-12-31

解决node.js 如何完美的从命令行接收参数所传递进来的值

楼上提到的commander是专门用来写CLI的了,如果你只是需要一个专门parse命令行参数的包,可以用substack的optimist: https://npmjs.org/package/optimist

关注 7 回答 5

尤雨溪 评论了问题 · 2013-11-19

个人资料里面的城市为什么没有海外选项?

尤雨溪 评论了回答 · 2013-11-19

javascript作用区域不理解的地方请教。

尤雨溪 回答了问题 · 2013-11-19

解决javascript作用区域不理解的地方请教。

这跟作用域完全没有关系,是因为你没搞清楚 jQuery 对象和原生 DOM node 的区别。

  • $('#email')document.getElementById('email') 是不一样的,前者是包裹了原生 node 对象的 jQuery 对象,后者是才一个原生的node对象。
  • .val() 是只有jQuery对象才具有的方法,而 .value 是一个原生的 input node 才具有的属性。这就是为什么 $('#email').valueundefined
  • 需要注意的是 document.getElementById('email') 每次返回的都是同一个 node,而每次运行 $('#email'),都会创建并返回一个新的jQuery对象,只是这些 jQuery 对象包裹的是同一个 node。也就是说你的第一个 email 变量和后来的 $('#email') 不是同一个对象,所以你在后者身上自然找不到存在前者身上的 val 这个属性。

关注 1 回答 3

认证与成就

  • 认证信息 Vue.js 框架作者
  • 获得 52 次点赞
  • 获得 6 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 5 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2013-09-03
个人主页被 2.6k 人浏览